Главная » Java » Стандартные типы потоков

0

Как видно из рис. 11.1, в пакете java.io определяются несколько типов потоков. Обычно они составляют пары ввода/вывода:

Конвейерные потоки Piped спроектированы для парного использования, при котором байты, записываемые в PipedOutputStream,  могут читаться из PipedInputStream.

Байтовые потоки ByteArray осуществляют ввод/вывод в массив байтов.

Фильтрующие потоки Filtered представляют собой абстрактные классы байтовых потоков, в которых с читаемыми байтами выполняются некоторые операции- фильтры. Объект FilterInputStream получает ввод от другого объекта InputStream, некоторым образом обрабатывает (фильтрует) байты и возвращает результат. Фильтрующие потоки могут объединяться в последовательности, при этом несколько фильтров превращаются в один сквозной фильтр. Аналогичным

образом осуществляется и фильтрация вывода  — для этого применяются

различные классы Filter OutputStream.

Буферизованные потоки Buffered расширяют понятие фильтрующих потоков, добавляя буферизацию, чтобы при каждом вызове read и write не приходилось обращаться к файловой системе.

Потоки данных Data разделяются на две категории. Интерфейсы Data Input и DataOutput определяют методы для чтения и записи данных встроенных типов, причем вывод одного из них воспринимается в качестве ввода другого. Эти интерфейсы реализуются классами DataInputStream  и Data OutputStream.

Файловые потоки File расширяют понятие фильтрующих потоков — байтовый поток в них связывается с определенным файлом. В них встроены некоторые методы, относящиеся к работе с файлами.

В пакет также входит ряд потоков ввода (вывода), для которых отсутствуют парные им потоки вывода (ввода):

Поток SequenceInputStream преобразует последовательность  объектов InputStream в один общий InputStream, благодаря чему несколько объединенных входных потоков могут рассматриваться  в виде единого входного потока.

StringBufferInputStream использует объект StringBuffer в качестве входного потока.

LineNumberInputStream расширяет FilterInputStream  и следит за нумерацией строк входного потока.

PushbackInputStream расширяет FilterInputStream, добавляя возможность отката на один байт, что оказывается полезным при сканировании и синтаксическом анализе входного потока.

PrintStream расширяет OutputStream и включает методы print и println для форматирования  данных на выводе. К этому типу относятся потоки System.out и Sy stem.err.

Кроме указанных выше типов, имеются еще несколько полезных классов ввода/вывода:

Класс File (не путать с потоковым классом File!) предназначен для работы с именами и путями файлов в локальной файловой системе. Он включает разделители для компонентов пути, локальный разделитель- суффикс и ряд полезных методов для работы с именами файлов.

RandomAccessFile  позволяет работать с файлами на уровне потоков с произвольным доступом. Он реализует интерфейсы DataInput и Data Output, а также большинство методов ввода/вывода классов Input Stream и OutputStream.

Класс StreamTokenizer разбивает InputStream на отдельные лексемы. Он представляет входной поток в виде понятных “слов”, что часто бывает необходимо при синтаксическом анализе введенных пользователем выражений.

Все эти классы могут расширяться и порождать новые разновидности потоковых классов,

предназначенные  для конкретных приложений.

Источник: Арнольд К., Гослинг Д. – Язык программирования Java (1997)

По теме:

  • Комментарии