С this tutorial,Как буферизованный ввод-вывод уменьшает накладные расходы, которые могут возникнуть при использовании небуферизованного ввода-вывода?
Большинство примеров, которые мы видели до сих пор используют небуферизованных I/O. Это означает, что каждый запрос на чтение или запись обрабатывается непосредственно базовой ОС. Это может сделать программу намного менее эффективной, поскольку каждый такой запрос часто запускает доступ к диску, сетевую активность или некоторую другую операцию , что относительно дорого.
Чтобы уменьшить этот накладные расходы, платформа Java реализует буферизованные потоки ввода-вывода . Буферизованные входные потоки считывают данные из известной области памяти как буфер ; API-интерфейс нативного ввода называется только тогда, когда буфер пуст. Аналогично, буферизованные выходные потоки записывают данные в буфер, а API-интерфейс собственного выхода вызывается только тогда, когда буфер заполнен.
Я понимаю, что такие операции, как доступ к диску, сетевая активность и т. Д., Приведут к нехватке памяти или времени выполнения для базовой ОС.
Вопрос: как программа считывает/записывает в определенную область памяти (буфер), уменьшает эти накладные расходы?
Я рассматриваю это как дополнение нескольких дополнительных шагов: сначала программа запрашивает ОС, например, считывает данные из файла и записывает их в буфер, а затем программа считывает их из буфера.
Ну, моя оперативная память намного быстрее, чем мой жесткий диск, и имеет лучшее соединение с ЦП, чем жесткий диск или SSD. – Tom
В дополнение к ответу @ Code-Apprententice вы можете проверить это http://stackoverflow.com/questions/9648811/specific-difference-between-bufferedreader-and-filereader –