В чем разница между использованием BufferedWriter и записью прямо в файл в Java?

Возможный дубликат:
В чем преимущество использования BufferedWriter для добавления в файл в Java?

Сайт, на который я смотрю, говорит

«Класс BufferWriter используется для записи текста в поток вывода символов, буферизации символов, чтобы обеспечить эффективную запись отдельных символов, массивов и строк».

Что делает его более эффективным и почему?


person Slerig    schedule 23.11.2011    source источник
comment
Я думал, что это может быть, но не посмотрел на другой вопрос. Прости за это.   -  person Slerig    schedule 23.11.2011


Ответы (5)


BufferedWriter ждет, пока буфер (8192 байта) не заполнится, и записывает весь буфер за одну дисковую операцию. Небуферизованная каждая отдельная запись приведет к дисковому вводу-выводу, который, очевидно, будет более дорогим.

person stacker    schedule 23.11.2011
comment
Теперь это имеет больше смысла. Спасибо. - person Slerig; 23.11.2011

BufferedWriter более эффективен, поскольку использует буферы, а не посимвольную запись. Так что это уменьшает I/O операций с диском. Данные собираются в буфер и записываются в файл, когда буфер заполнен. Вот почему иногда в файл не записываются данные, если вы не вызвали метод сброса. То есть данные собираются в буфер, но программа завершает работу до того, как запишет их в файл. Вызов метода flush приведет к тому, что данные будут записаны в файл, даже если буфер не заполнен полностью.

person Krishan    schedule 23.11.2011
comment
Спасибо за информацию о методе промывки. - person Slerig; 23.11.2011

Стоимость записи становится высокой, когда вы записываете в файл посимвольно. Для снижения этих затрат предусмотрены буферы. Если вы пишете в Buffer, он ждет некоторого предела, а затем записывает все на диск.

person Naved    schedule 23.11.2011

Жесткий диск имеет минимальную единицу хранения информации, поэтому, например, если вы записываете один байт, операционная система запрашивает диск для хранения единицы хранения (я думаю, что минимум составляет 512 байт). Итак, вы просите записать один байт, а операционная система записывает гораздо больше. Если вы попросите сохранить 512 байт с 512 вызовами, вы в конечном итоге будете выполнять гораздо больше операций ввода-вывода (512 дисковых операций), чем буферизовать 512 байтов и выполнять только один вызов (1 дисковая операция).

person Giovanni    schedule 23.11.2011

Как следует из названия, BufferedWriter использует буфер для снижения затрат на запись. Если вы записываете в файл, вы, возможно, знаете, что запись 1 байта или запись 4 КБ стоят примерно одинаково. Время, необходимое для выполнения такой записи, определяется временем доступа (~ 8 мс), которое представляет собой время, необходимое диску для вращения и поиска нужного сектора.

Кроме того, объединение небольших операций записи в более крупную позволяет снизить нагрузку на операционную систему и повысить производительность.

Большинство операционных систем имеют внутренний буфер для кэширования записей. Однако эти кэши пытаются выяснить, что делает приложение, анализируя шаблоны записи. Если само приложение может выполнять это кэширование и выполнять запись только тогда, когда данные готовы, результат (с точки зрения производительности) будет лучше.

person Matteo    schedule 23.11.2011