Иерархия классов потоков ввода-вывода
Рис. 1. Иерархия символьныx потоков
Рис. 2. Классы байтовых потоков
Все классы пакета java.io можно разделить на две группы: классы, создающие поток (data sink), и классы, управляющие потоком (data processing).
Классы, создающие потоки, в свою очередь, можно разделить на пять групп:
-
классы, создающие потоки, связанные с файлами:
FileReader
FilelnputStream
FileWriter
FileOutputStream
RandomAccessFile
-
классы, создающие потоки, связанные с массивами:
CharArrayReader
ByteArrayInputStream
CharArrayWriter
ByteArrayOutputStream
-
классы, создающие каналы обмена информацией между подпроцессами:
PipedReader
PipedlnputStream
PipedWriter
PipedOutputStream
-
классы, создающие символьные потоки, связанные со строкой:
StringReade
StringWriter
-
классы, создающие байтовые потоки из объектов Java:
| ObjectlnputStream |
| ObjectOutputStream |
Слева перечислены классы символьных потоков, справа — классы байтовых потоков.
Классы, управляющие потоком, получают в своих конструкторах уже имеющийся поток и создают новый, преобразованный поток. Можно представлять их себе как "переходное кольцо", после которого идет труба другого диаметра.
Четыре класса созданы специально для преобразования потоков:
FilterReader FilterlnputStream
FilterWriter FilterOutputStream
Сами по себе эти классы бесполезны — они выполняют тождественное преобразование. Их следует расширять, переопределяя методы ввода/вывода. Но для байтовых фильтров есть полезные расширения, которым соответствуют некоторые символьные классы. Перечислим их.
Четыре класса выполняют буферизованный ввод/вывод:
BufferedReader BufferedlnputStream
BufferedWriter BufferedOutputStream
Два класса преобразуют поток байтов, образующих восемь простых типов Java, в эти самые типы:
DatalnputStream DataOutputStream
Два класса содержат методы, позволяющие вернуть несколько символов или байтов во входной поток:
PushbackReader PushbackInputStream
Два класса связаны с выводом на строчные устройства — экран дисплея, принтер:
PrintWriter PrintStream
Два класса связывают байтовый и символьный потоки:
InputStreamReader — преобразует входной байтовый поток в символьный поток;
OutputStreamWriter — преобразует выходной символьный поток в байтовый поток.
Класс StreamTokenizer позволяет разобрать входной символьный поток на отдельные элементы (tokens) подобно тому, как классSstringTokenizer разбираeт строку.
Из управляющих классов выделяется класс SequenceInputStream, сливающий несколько потоков, заданных в конструкторе, в один поток, и класс
LineNumberReader, "умеющий" читать выходной символьный поток построчно. Строки в потоке разделяются символами '\n' и/или '\г'.
Этот обзор классов ввода/вывода немного проясняет положение, но не объясняет, как их использовать. Перейдем к рассмотрению реальных ситуаций.
- Потоки данных. Работа с локальными файлами Цели работы
- Порядок выполнения работы
- Вопросы для самопроверки и защиты.
- Организация ввода-вывода в Java
- Классы потоков ввода-вывода
- Иерархия классов потоков ввода-вывода
- Консольный ввод/вывод
- Файловый ввод/вывод
- Получение свойств файла
- Буферизованный ввод/вывод
- Поток простых типов Java
- Кодировка utf-8
- Прямой доступ к файлу
- Каналы обмена информацией
- Сериализация объектов