Что именно использует flush для объекта printwriter?

Я ищу теоретический анализ. Я имею в виду, как работает буферная система и какое преимущество дает использование flush? Пожалуйста, проиллюстрируйте пример, если это возможно.

1 ответ

Когда вы пишете в текстовый файл, BufferedWriter не записывает его на диск сразу. Вместо этого он хранит данные в буфере в памяти.

Преимущество этого заключается в том, что многие небольшие записи будут помещаться в буфер, а затем данные будут записываться на диск за один раз, т.е. с одной большой записью вместо множества мелких, что было бы неэффективно.

Когда буфер заполнен, BufferedWriter запишем данные самостоятельно, т.е. это будет делать то же самое, что и вызов flush() когда буфер заполнен.

Итак, когда вы должны позвонить flush() вручную?

  • Когда вам нужны данные, чтобы быть на диске сейчас. Если у вас есть программа, которая читает данные из файла на диске одновременно с записью, вы можете убедиться, что все данные, которые должны находиться на диске, действительно есть.

  • Если вы пишете через сетевое соединение, вы можете позвонить flush() так что данные отправляются через сеть немедленно.

Обычно не нужно звонить flush(), Просто пиши и звони close() когда закончено, и нет необходимости flush() как close() очищает буфер для вас.

Другие вопросы по тегам