Что именно использует flush для объекта printwriter?
Я ищу теоретический анализ. Я имею в виду, как работает буферная система и какое преимущество дает использование flush? Пожалуйста, проиллюстрируйте пример, если это возможно.
1 ответ
Когда вы пишете в текстовый файл, BufferedWriter
не записывает его на диск сразу. Вместо этого он хранит данные в буфере в памяти.
Преимущество этого заключается в том, что многие небольшие записи будут помещаться в буфер, а затем данные будут записываться на диск за один раз, т.е. с одной большой записью вместо множества мелких, что было бы неэффективно.
Когда буфер заполнен, BufferedWriter
запишем данные самостоятельно, т.е. это будет делать то же самое, что и вызов flush()
когда буфер заполнен.
Итак, когда вы должны позвонить flush()
вручную?
Когда вам нужны данные, чтобы быть на диске сейчас. Если у вас есть программа, которая читает данные из файла на диске одновременно с записью, вы можете убедиться, что все данные, которые должны находиться на диске, действительно есть.
Если вы пишете через сетевое соединение, вы можете позвонить
flush()
так что данные отправляются через сеть немедленно.
Обычно не нужно звонить flush()
, Просто пиши и звони close()
когда закончено, и нет необходимости flush()
как close()
очищает буфер для вас.