- •Механизмы ввода и вывода
- •Класс OutputStream
- •План лекции
- •Обмен данными
- •Традиционно, проблемы!
- •Потоки данных
- •Разновидности потоков
- •Структура пакета java.io
- •Разновидности потоков
- •Класс InputStream
- •Класс Reader
- •Класс Writer
- •Классы потоков ввода и вывода
- •Иерархия байтовых потоков
- •Иерархия символьных потоков
- •Забавная особенность
- •Группа потоков Print
- •Группа байтовых потоков ByteArray
- •Группа байтовых потоков ByteArray
- •Группы символьных потоков CharArray и String
- •Группа потоков File
- •Классы-трансляторы
- •InputStreamReader и
- •Группа потоков Filter
- •Группа потоков Buffered
- •Группа потоков Buffered
- •Группа потоков Piped
- •Группа потоков Piped
- •Класс StreamTokenizer
- •Класс StreamTokenizer
- •Группа байтовых потоков Data
- •Группа байтовых потоков Data
- •Класс File
- •Класс File
- •Пример записи в текстовый файл
- •Пример чтения из текстового файла и из консоли
- •Пример записи в байтовый файл
- •Пример чтения из байтового файла
- •Соответствие классов для байтовых и символьных потоков
- •Соответствие классов для байтовых и символьных потоков
- •Сериализация объектов
- •Сериализация объектов
- •Группа байтовых потоков Object
- •Пример сериализации в файл
- •Пример десериализации из файла
- •Сравнение исходного и восстановленного объектов
- •Подготовка классов к сериализации
- •Порядок сериализации и десериализации
- •Пример иерархии классов
- •Результаты десериализации
- •Порядок сериализации
- •Порядок десериализации
- •Сериализация связанных объектов
- •Настройка сериализации
- •Настройка сериализации
- •Контроль версий
- •Спасибо за внимание!
- •Дополнительные источники
Класс Reader
int read()
throws IOException
abstract int read(char[] b, int off, int len) throws IOException
int read(char[] b)
throws IOException
long skip(long n)
throws IOException
boolean ready()
throws IOException
abstract void close()
throws IOException
11
Класс Writer
void write(int ch) throws IOException
abstract void write(char[] b, int off, int len) throws IOException
void write(char[] b)
throws IOException
void write(String str, int off, int len) throws IOException
void write(String str)
throws IOException
abstract void flush() throws IOException
abstract void close() throws IOException
12
Классы потоков ввода и вывода
Образуют 4 иерархии, в основе которых лежат базовые абстрактные классы
Имя любого дочернего класса в иерархии имеет суффикс, совпадающий с именем корневого класса
По сути делятся на 2 вида:
«Реальные» потоки: источник (получатель) данных реален
Потоки-обертки: источником (получателем) данных является другой поток
13
Иерархия байтовых потоков
InputStream |
OutputStream |
ByteArrayInputStream |
ByteArrayOutputStream |
FileInputStream |
FileOutputStream |
FilterInputStream |
FilterOutputStream |
BufferedInputStream |
BufferedOutputStream |
DataInputStream |
DataOutputStream |
PushbackInputStream |
PrintStream |
ObjectInputStream |
ObjectOutputStream |
PipedInputStream |
PipedOutputStream |
SequenceInputStream |
|
14
Иерархия символьных потоков
Reader
BufferedReader
LineNumberReader
CharArrayReader
FilterReader
PushbackReader
InputStreamReader
FileReader
PipedInputStream
Writer
BufferedWriter
CharArrayWriter
FilterWriter
OutputStreamWriter
FileWriter
PipedWriter
PrintWriter
StringReader |
StringWriter |
15
Забавная особенность
Уже знакомые потоки:
System.out PrintStream
System.in InputStream
System.err PrintStream
Какого они типа?
Байтового!!! (для совместимости с версиями Java 1.0 и 1.1)
16
Группа потоков Print
Обертки PrintStream и PrintWriter
содержат методы, упрощающие задачу вывода данных простых типов в текстовом виде
Методы print() и println() не выбрасывают исключений
System.out и System.err – единственные потоки PrintStream
17
Группа байтовых потоков ByteArray
ByteArrayInputStream, ByteArrayOutputStream
В качестве источника и получателя данных используются массивы байт
В потоке вывода размер буфера может меняться динамически
В потоке вывода существуют методы преобразования:
к массиву байт
byte[] toByteArray()
к строке
String toString()
вывода в другой поток
void writeTo(OutputStream out)
18
Группа байтовых потоков ByteArray
byte[] bytes = {1, 0, -1};
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
System.out.println("first element: " + (byte) in.read()); System.out.println("second element: " + (byte) in.read()); System.out.println("third element: " + (byte) in.read());
first element: 1 second element: 0 third element: -1
ByteArrayOutputStream out = new ByteArrayOutputStream(); out.write(5);
out.write(10);
byte[] bytes = out.toByteArray();
19
Группы символьных потоков CharArray и String
CharArrayReader и CharArrayWriter аналогичны ByteArrayInputStream и ByteArrayOutputStream, но оперируют с массивом символов
StringReader и StringWriter имеют аналогичную функциональность, позволяют считывать символы из строки и записывать данные в строковый буфер
20
