Чтение онлайн

на главную - закладки

Жанры

Философия Java3

Эккель Брюс

Шрифт:

Класс BufferedOutputStream модифицирует поток так, чтобы использовалась буферизация при записи данных, которая предотвращает слишком частые обращения к физическому устройству. Вероятно, именно его следует порекомендовать для вывода в поток каких-либо данных.

Таблица 16.4. Разновидности надстроек FilterOutputStream

Аргументы конструктора, порядок применения

Класс

Назначение

Используется в сочетании с классом DatalnputStream, позволяет записывать в поток примитивы (целые, символы и т. д.) независимо от платформы При записи форматирует

данные. Если класс DataOutputStream отвечает за хранение данных, то этот класс отвечает за отображение данных

DataOutputStream

PrintStream

BufferedOutputStream

Используется для буферизации вывода, то есть для предотвращения прямой записи в устройство каждый раз при записи данных. Для записи содержимого буфера в устройство используется метод flushQ

Выходной поток OutputStream. Содержит все необходимое для записи простейших типов данных

Выходной поток OutputStream, а также необязательный логический (boolean) аргумент, показывающий, нужно ли очищать буфер записи при переходе на новую строку.

Должен быть последним в «наслоении» объектов для выходного потока OutputStream. Вероятно, вы будете часто его использовать Выходной поток OutputStream, а также размер буфера записи (необязательно). Не предоставляет интерфейса как такового, просто указывает, что при выводе необходимо использовать буферизацию. К классу следует присоединить более содержательный класс-«фильтр»

Классы Reader и Writer

При выпуске Java версии 1.1 в библиотеке ввода/вывода были сделаны значительные изменения. Когда в первый раз видишь новые классы, основанные на базовых классах Reader и Writer, возникает мысль, что они пришли на замену классам InputStream и OutputStream. Тем не менее это не так. Хотя некоторые аспекты изначальной библиотеки ввода/вывода, основанной на потоках, объявлены устаревшими (и при их использовании компилятор выдаст соответствующее предупреждение), классы InputStream и OutputStream все еще предоставляют достаточно полезные возможности для проведения байт-ориентированного ввода/ вывода. Одновременно с этим классы Reader и Writer позволяют проводить операции символьно ориентированного ввода/вывода, в кодировке Юникод. Дополнительно:

1. В Java 1.1 в иерархию потоков, основанную на классах InputStream и OutputStream, были добавлены новые классы. Очевидно, эта иерархия не должна была уйти в прошлое.

2. В некоторых ситуациях для решения задачи используются как «байтовые», так и «символьные» классы. Для этого в библиотеке появились классы-адаптеры: InputStreamReader конвертирует InputStream в Reader, a Output-StreamWriter трансформирует OutputStream в Writer.

Основной причиной появления иерархий классов Reader и Writer стала интернационализация. Старая библиотека ввода/вывода поддерживала только 8-битовые символы и зачастую неверно обращалась с 16-битовыми символами Юникода. Именно благодаря символам Юникода возможна интернационализация программ (простейший тип Java char (символ) также основан на Юникоде), поэтому новые классы отвечают за их правильное использование в операциях ввода/вывода. Вдобавок новые средства спроектированы так, что работают быстрее старых классов.

Источники и приемники данных

Практически у всех изначальных потоковых классов имеются соответствующие классы Reader

и Writer со схожими функциями, однако работающие с символами Юникода. Впрочем, во многих ситуациях правильным (а зачастую и единственным) выбором становятся классы, ориентированные на прием и посылку байтов; в особенности это относится к библиотекам сжатия данных java.utiLzip. Поэтому лучше всего будет такая тактика: пытаться использовать классы Reader и Writer где только возможно. Обнаружить место, где эти классы неприменимы, будет нетрудно — компилятор выдаст вам сообщение об ошибке.

В табл. 16.5 показано соответствие между источниками и получателями информации двух иерархий библиотеки ввода/вывода Java.

Таблица 16.5. Соответствие между источниками и получателями информации двух иерархий библиотеки ввода/вывода Java

Источники и приемники: классы Java 1.0

Соответствующие классы Java 1.1

InputStream

Reader

адаптер: InputStreamReader

OutputStream

Writer

адаптер: OutputStreamWriter

FilelnputStream

FileReader

FileOutputStream

FileWriter

StringBufferlnputStream

StringReader

(отсутствует)

StringWriter

ByteArraylnputStream

CharArrayReader

ByteArrayOutputStream

CharArrayWriter

PipedlnputStream

PipedReader

PipedOutputStream

PipedWriter

В основном интерфейсы соответствующих друг другу классов из двух разных иерархий очень сходны, если не совпадают.

Изменение поведения потока

Для потоков InputStream и OutputStream существуют классы-«декораторы» на основе классов FilterlnputStream и FilterOutputStream. Они позволяют модифицировать изначальный поток ввода/вывода так, как это необходимо в данной ситуации. Иерархия на основе классов Reader и Writer также взяла на вооружение данный подход, но по-другому.

В табл. 16.6 соответствие классов уже не такое точное, как это было в предыдущей таблице. Причина — организация классов: в то время как BufferedOutputStream является подклассом FilterOutputStream, класс BufferedWriter не наследует от базового класса FilterWriter (от него вообще не происходит ни одного класса, хотя он и является абстрактным — видимо, его поместили в библиотеку просто для полноты картины). Впрочем, интерфейсы классов очень похожи.

Таблица 16.6. Соответствие между фильтрами двух иерархий библиотеки ввода/вывода Java

Фильтры: классы Java 1.0

Соответствующие классы Java 1.1

FilterlnputStream

FilterReader

FilterOutputStream

FilterWriter (абстрактный класс без подклассов)

BufferedlnputStream

BufferedReader

(также есть метод для чтения строк readl_ine)

BufferedOutputStream

Поделиться:
Популярные книги

100 великих войн

Соколов Борис Вадимович
100 великих
Справочная литература:
энциклопедии
6.40
рейтинг книги
100 великих войн

Средневековая история. Тетралогия

Гончарова Галина Дмитриевна
Средневековая история
Фантастика:
фэнтези
попаданцы
9.16
рейтинг книги
Средневековая история. Тетралогия

Темное, кривое зеркало. Том 5 : Средь звезд, подобно гигантам.

Уильямс Гарэт Д.
5. Темное, кривое зеркало
Фантастика:
эпическая фантастика
альтернативная история
6.25
рейтинг книги
Темное, кривое зеркало. Том 5 : Средь звезд, подобно гигантам.

Экспансия — II

Семенов Юлиан Семенович
11. Штирлиц
Детективы:
исторические детективы
7.78
рейтинг книги
Экспансия — II

Том 3. Рассказы 1903-1915. Публицистика

Короленко Владимир Галактионович
3. Собрание сочинений в пяти томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 3. Рассказы 1903-1915. Публицистика

Целительные силы. Книга 1. Очищение организма и правильное питание. Биосинтез и биоэнергетика

Малахов Геннадий Петрович
Дом и Семья:
здоровье и красота
4.00
рейтинг книги
Целительные силы. Книга 1. Очищение организма и правильное питание. Биосинтез и биоэнергетика

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Корсаков

Кощеев Владимир
1. Корсаков
Фантастика:
альтернативная история
аниме
попаданцы
5.00
рейтинг книги
Корсаков

Хозяин Каменных гор

Федоров Евгений Александрович
3. Каменный пояс
Проза:
историческая проза
7.75
рейтинг книги
Хозяин Каменных гор

Байка о том, как Лиса и Красная Королева о рае мечтали

Клауд Чак
1. Байки безумца Клауда
Фантастика:
юмористическая фантастика
5.00
рейтинг книги
Байка о том, как Лиса и Красная Королева о рае мечтали

Без пощады

Зорич Александр
2. Завтра война
Фантастика:
космическая фантастика
8.62
рейтинг книги
Без пощады

Разговоры запросто

Роттердамский Эразм
Научно-образовательная:
философия
5.00
рейтинг книги
Разговоры запросто

«О» - значит омут

Графтон Сью
Кинси Милхоун
Детективы:
крутой детектив
5.00
рейтинг книги
«О» - значит омут

Том 7. Произведения 1863-1871

Салтыков-Щедрин Михаил Евграфович
7. Собрание сочинений в двадцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 7. Произведения 1863-1871