Классы байтовых потоков
Рисунок 18.2. Классы байтовых потоков
Все классы пакета java.io можно разделить на две группы: классы, создающие поток (data sink), и классы, управляющие потоком (data processing).
Классы, создающие потоки, в свою очередь, можно разделить на пять групп:
-
классы, создающие потоки, связанные с файлами:
FileReader FilelnputStreamFileWriterFile Outputstream
RandomAccessFile
-
классы, создающие потоки, связанные с массивами:
CharArrayReader ByteArraylnputStream
CharArrayWriter ByteArrayOutputStream
-
классы, создающие каналы обмена информацией между подпроцессами:
PipedReader PipedlnputStream
PipedWriter PipedOutputStream
-
классы, создающие символьные потоки, связанные со строкой:
StringReader
StringWriter
-
классы, создающие байтовые потоки из объектов Java:
ObjectlnputStream
ObjectOutputStream
Слева перечислены классы символьных потоков, справа — классы байтовых потоков.
Классы, управляющие потоком, получают в своих конструкторах уже имеющийся поток и создают новый, преобразованный поток. Можно представлять их себе как "переходное кольцо", после которого идет труба другого диаметра.
Четыре класса созданы специально для преобразования потоков:
FilterReader FilterlnputStream
FilterWriter FilterOutputStream
Сами по себе эти классы бесполезны — они выполняют тождественное преобразование. Их следует расширять, переопределяя методы ввода/вывода. Но для байтовых фильтров есть полезные расширения, которым соответствуют некоторые символьные классы. Перечислим их.
Четыре класса выполняют буферизованный ввод/вывод:
BufferedReader BufferedlnputStream
BufferedWriter BufferedOutputStream
Два класса преобразуют поток байтов, образующих восемь простых типов Java, в эти самые типы:
DatalnputStream DataOutputStream
Два класса содержат методы, позволяющие вернуть несколько символов или байтов во входной поток:
PushbackReader PushbacklnputStream
Два класса связаны с выводом на строчные устройства — экран дисплея, принтер:
PrintWriter PrintStream
Два класса связывают байтовый и символьный потоки:
- inputstreamReader — преобразует входной байтовый поток в символьный поток;
- Outputstreamwriter — преобразует выходной символьный поток в байтовый поток.
Класс streamTokenizer позволяет разобрать входной символьный поток на отдельные элементы (tokens) подобно тому, как класс stringTokenizer, рассмотренный нами в главе 5, разбирал строку.
Из управляющих классов выделяется класс sequenceinputstream, сливающий несколько потоков, заданных в конструкторе, в один поток, и класс
LineNumberReader, "умеющий" читать выходной символьный поток построчно. Строки в потоке разделяются символами '\n' и/или '\г'.
Этот обзор классов ввода/вывода немного проясняет положение, но не объясняет, как их использовать. Перейдем к рассмотрению реальных ситуаций.