Философия Java3
вернуться

Эккель Брюс

Шрифт:

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

Практически у всех изначальных потоковых классов имеются соответствующие классы 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

BufferedWriter

DatalnputStream

Используйте класс DatalnputStream

(за исключением чтения строк методом readLine —

для их чтения предпочтителен класс BuffredReader)

PrintStream

PrintWriter

LineNumberlnputStream

LineNumberReader

(устарел)

StreamTokenizer

StreamTokenizer

(используйте конструктор с аргументом Reader)

PushBacklnputStream

PushBackReader

Один совет очевиден: для чтения строк больше не следует употреблять класс DatalnputStream (при такой попытке компилятор сообщит вам, что этот метод для чтения строк устарел), вместо него используйте класс BufferedReader. Во всех других ситуациях класс DatalnputStream остается выбором «номер один» из всего многообразия библиотеки ввода/вывода.

  • Читать дальше
  • 1
  • ...
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win

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