logo
lab5

Иерархия классов потоков ввода-вывода

Рис. 1. Иерархия символьныx потоков

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

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

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

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

    FileReader

    FilelnputStream

    FileWriter

    FileOutputStream

    RandomAccessFile

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

    CharArrayReader

    ByteArrayInputStream

    CharArrayWriter

    ByteArrayOutputStream

  3. классы, создающие каналы обмена информацией между подпроцессами:

    PipedReader

    PipedlnputStream

    PipedWriter

    PipedOutputStream

  4. классы, создающие символьные потоки, связанные со строкой:

    StringReade

    StringWriter

  5. классы, создающие байтовые потоки из объектов 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' и/или '\г'.

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