BufferedWriter записывает случайную строку как значение NULLJAVA

Программисты JAVA общаются здесь
Anonymous
BufferedWriter записывает случайную строку как значение NULL

Сообщение Anonymous »

Я работаю с устаревшим кодом, код был написан на Java 5 и 6.
Недавно они обновили машины, на которых используется этот код, для использования Java 8. Они перекомпилировали этот старый код в JAVA 8, он не дал сбоя, но теперь наблюдается странное поведение.
При записи в файл он случайным образом записывает строку как нулевые или пустые символы, создавая пустое пространство при визуализации файла. Сгенерированный файл представляет собой смесь обычного текстового и двоичного файла.
Он считывает изображение и записывает некоторые данные перед записью части изображения. этот устаревший код работает без изменений в течение многих лет, и при регистрации строки перед записью она отображается правильно в журналах.
Как видно, он постоянно сбрасывает BufferedWriter после передачи строки для записи, FileOutputStream не имеет никаких ошибок.
EDIT 1:
Я отвечу на некоторые вопросы и сделаю некоторые пояснения.
getOutputData всегда генерирует строку правильно, никогда null
Результирующий файл состоит из блоков по 12455 символов.
При записи в файл STR произвольно не записывается, у вас будет файл, где:

STR1+imageblock
STR2+imageblock
nothing+imageblock
STR4+imageblock

Я не могу выполнить этот код на своей локальной машине, мне нужно скомпилировать его через конвейер и попробовать на тестовой машине.
При попытке воспроизвести недопустимый случай в тесте (машина с еще меньшим объемом оперативной памяти, чем на рабочей машине) я не могу воспроизвести проблему, файл генерируется правильно.
Это происходит произвольно, некоторые выполнения выполняются безупречно, в других возникает проблема. и обычно это только одна строка.
STR всегда правильно печатается в журнале.
И упрощены некоторые методы.
Журнал был добавлен, чтобы выяснить, произошел ли сбой, прежде чем писать, и пришел к выводу, что нет, STR всегда формируется правильно.
Команда, сообщившая об ошибке, может исправить ее, скопировав следующий STR и изменив соответствующий номер блока, поэтому мы знаем, что сбой происходит только в этой части.
Использование онлайн-редактора проблемной части
Изображение

Код: Выделить всё

ImageInputStream isb = ImageIO.createImageInputStream(file);
Iterator iterator = ImageIO.getImageReaders(isb);
if (iterator == null || !iterator.hasNext())
{
throw new IOException("Image file format not supported by ImageIO: ");
}
ImageReader reader = (ImageReader) iterator.next();
reader.setInput(isb);
int nbPages = reader.getNumImages(true);
outputFileStream = new FileOutputStream(getPathExit(), true);
fileWriter = new BufferedWriter(new OutputStreamWriter(outputFileStream));
byte[] block = new byte[GeneratingIssuedFileConstants.BLOCK_SIZE_IMAGE];
String str = null;
int total=0;
for(int p=0;p -1)
{
for (int z=bytesRead; z

Вернуться в «JAVA»