DataOutputStream автоматически очищается, когда его буфер заполнен? - PullRequest
1 голос
/ 09 октября 2011

Я записываю информацию в файл через DataOutputStream (RandomAccessFile-> FileOutputStream-> BufferedOutputStream-> DataOutputStream).

Я предполагаю, что если буфер, используемый для вывода данных, заполнен, то dataoutputпоток автоматически сбрасывается?

Причина, по которой я спрашиваю, состоит в том, что я записываю данные в цикл for и сбрасываю после цикла (я предполагаю, что сброс после каждой итерации цикла разрушит точкуиспользования буферов), и когда данные становятся слишком большими (4 МБ АТМ), мой файл выходит неправильно.

1 Ответ

3 голосов
/ 09 октября 2011

DataOutputStream не имеет буфера, поэтому нечего очищать.Все написано в методах write()/writeXXX().Однако у BufferedOutputStream есть, конечно, буфер, поэтому вам обязательно нужно сбросить или закрыть, чтобы эти данные были записаны в файл.Вам необходимо закрыть самый внешний поток, т.е. в этом случае DataOutputStream, а не любой из вложенных потоков.

, когда данные становятся слишком большими (4 МБ атм), мой файл не выходитправильно.

Вам придется опубликовать свой код.Размер буфера BufferedOutputStream по умолчанию составляет 8 Кбайт, не имеет ничего общего с 4 Мб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...