Spec-Zone .ru
спецификации, руководства, описания, API
След: Существенные Классы
Урок: Основной ввод-вывод
Раздел: Потоки ввода-вывода
Буферизованные Потоки
Домашняя страница > Существенные Классы > Основной ввод-вывод

Буферизованные Потоки

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

Чтобы уменьшить этот вид издержек, платформа Java реализует буферизованные потоки ввода-вывода. Буферизованные входные потоковые данные чтения от области памяти, известной как буфер; собственный входной API вызывают только, когда буфер пуст. Точно так же буферизованные потоки вывода пишут данные в буфер, и собственный выходной API вызывают только, когда буфер полон.

Программа может преобразовать небуферизованный поток в буферизованный поток, используя переносящуюся идиому, которую мы использовали несколько раз теперь, где небуферизованный потоковый объект передают конструктору для буферизованного потока class. Вот то, как Вы могли бы изменить вызовы конструктора в CopyCharacters пример, чтобы использовать буферизованный ввод-вывод:

inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));

Есть четыре буферизованных потоковых класса, используемые, чтобы обернуть небуферизованные потоки: BufferedInputStream и BufferedOutputStream создайте буферизованные потоки байтов, в то время как BufferedReader и BufferedWriter создайте буферизованные символьные потоки.

Сбрасывание Буферизованных Потоков

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

Некоторые буферизованные выходные классы поддерживают автосброс, определенный дополнительным параметром конструктора. Когда автосброс включается, определенные ключевые события заставляют буфер быть сброшенным. Например, автосброс PrintWriter возразите сбрасывает буфер на каждом вызове println или format. См. Форматирование для больше на этих методах.

Чтобы сбросить поток вручную, вызовите flush метод. flush метод допустим на любом потоке вывода, но не имеет никакого эффекта, если поток не буферизуется.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Символьные Потоки
Следующая страница: Сканирование и Форматирование