Java -практика использования

       

Классы байтовых потоков



Рисунок 18.2. Классы байтовых потоков


Все классы пакета java.io можно разделить на две группы: классы, создающие поток (data sink), и классы, управляющие потоком (data processing).

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

  • классы, создающие потоки, связанные с файлами:

    FileReader        FilelnputStream 

    FileWriterFile    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' и/или '\г'.

Этот обзор классов ввода/вывода немного проясняет положение, но не объясняет, как их использовать. Перейдем к рассмотрению реальных ситуаций.



Содержание раздела