Потоки ввода/вывода
Все классы пакета 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
