В большинстве рассмотренных нами примеров используется небуферизованный ввод-вывод. Это означает, что каждый запрос на чтение или запись обрабатывается непосредственно базовой ОС. Это может значительно снизить эффективность программы, так как каждый такой запрос часто запускает доступ к диску, сетевую активность или какую-либо другую относительно дорогостоящую операцию.
Чтобы уменьшить такие накладные расходы, платформа Java реализует буферизованные потоки ввода-вывода. Буферизованные входные потоки считывают данные из области памяти, известной как буфер; собственный API ввода вызывается только тогда, когда буфер пуст. Точно так же буферизованные потоки вывода записывают данные в буфер, а собственный API вывода вызывается только при заполнении буфера. сильный>
Я понимаю, что такие операции, как доступ к диску, сетевая активность и т. д., вызовут накладные расходы памяти или времени выполнения для базовой ОС.
Но вопрос в том, как программа, читающая/записывающая в определенную область памяти (буфер), уменьшает эти накладные расходы?
Я вижу это как добавление пары дополнительных шагов: сначала программа запрашивает ОС, например, прочитать данные из файла и записать их в буфер, а затем программа читает их из буфера.