
- •Ввод-вывод. Сериализация
- •Цели занятия
- •Ввод-вывод
- •Ввод-вывод
- •Ввод-вывод
- •Ввод-вывод
- •Ввод-вывод
- •Байтовые потоки
- •InputStream
- •InputStream
- •InputStream
- •InputStream
- •InputStream
- •InputStream
- •OutputStream
- •OutputStream
- •OutputStream
- •Символьные потоки
- •Reader
- •Reader
- •Reader
- •Различия Reader и InputStream
- •Reader
- •Writer
- •Writer
- •Writer
- •Символьные и стандартные потоки
- •InputStreamReader и
- •InputStreamReader и
- •InputStreamReader и
- •Краткий обзор классов потоков
- •Потоки Filter
- •Потоки Buffered
- •Потоки Buffered
- •Потоки Buffered
- •Потоки Piped
- •Потоки Piped
- •Потоки Piped
- •Байтовые потоки ByteArray
- •Символьные потоки CharArray и
- •Потоки Print
- •Потоки Print
- •Класс StreamTokenizer
- •Класс StreamTokenizer
- •Класс StreamTokenizer
- •Класс StreamTokenizer
- •Байтовые потоки Data. DataInput и
- •Классы потоков Data
- •Классы потоков Data
- •Классы потоков Data
- •Класс File
- •Потоки File
- •Потоки File
- •Сериализация объектов
- •Сериализация объектов
- •Сериализация объектов
- •Подготовка классов к
- •Подготовка классов к
- •Подготовка классов к
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Настройка механизма
- •Настройка механизма
- •Настройка механизма
- •Настройка механизма
- •Контроль версий объектов
- •Контроль версий объектов
- •Контроль версий объектов
- •Контроль версий объектов
- •Литература

Reader
21 |
public abstract int read(char[] buf, int offset, int |
|
|
|
count) |
|
throws IOException |
|
Считывает символы и сохраняет их в части массива |
|
buf, максимальное количество символов, |
|
подлежащих чтению, определяется значением |
|
count (если 0 – чтение не производится и |
|
возвращается 0). Символы заносятся в элементы |
|
массива, начиная с buf[offset] и до buf[offset+count- |
|
1]. Метод возвращает количество фактически |
|
считанных символов. Если ввиду достижения конца |
|
потока не считан ни один символ, возвращается -1. |
|
Если первый символ не может быть считан по |
|
причине, не связанной с достижением конца |
|
потока (например, поток уже закрыт), |
|
выбрасывается исключение типа IOException |
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

|
|
Reader |
22 |
|
public int read(char[] buf) throws IOException |
|
||
|
|
Метод аналогичен предыдущему при условии read(buf, 0, |
|
|
buf.length) |
|
|
public long skip(long count) throws IOException |
|
|
Пропускает, самое большее, count символов либо часть |
|
|
последовательности символов до конца потока. Возвращает |
|
|
количество фактически пропущенных символов. Значение |
|
|
count не должно быть отрицательным |
|
|
public boolean ready() throws IOException |
|
|
Возвращает true, если поток готов для чтения данных, т.е. в |
нём существует хотя бы один доступный символ. Результат, равный false, не свидетельствует о том, что очередной вызов read приведёт к возникновению блокировки, поскольку в промежутке между обращениями к ready и read в поток может поступить очередная порция данных
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

Reader
23public abstract void close() throws IOException
Закрывает ранее открытый поток чтения. Метод используется для высвобождения ресурсов, связанных с
потоком. Любые попытки обращения к закрытому потоку приводят к выбрасыванию исключения типа IOException, но повторное закрытие потока эффектов не вызывает
•При реализации Reader требуется, чтобы производный класс обеспечил практическое воплощение варианта метода read(), осуществляющего чтение данных в массив символов, и версии метода close()
•Во многих случаях, однако, производительность операций может быть улучшена за счёт переопределения и других методов
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

Различия Reader и InputStream
24 • В Reader базовым абстрактным методом чтения является вариант метода read(), осуществляющий чтение в массив типа char, а остальные версии основываются на базовой. В классе InputStream в качестве основного объявлен метод read(), выполняющий ввод одного байта
•Классы, производные от Reader, обязаны предоставить реализацию абстрактного метода close(): в отличие от наследования пустой реализации; многим классам потоков, как правило, необходимо «знать», был ли закрыт поток или нет, так что метод close обычно подлежит переопределению
•Наконец, в классе InputStream предусмотрен метод available(), позволяющий выяснить, какой объём данных готов для ввода, а класс Reader предоставляет метод ready(), свидетельствующий о том, существуют ли такие данные или нет
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

Reader
25 Пример 2
import java.io.*; class CountSpace {
public static void main(String[] args) throws IOException { Reader in;
if (args.length == 0)
in =new InputStreamReader(System.in); else
in = new FileReader(args[0]); int ch;
int total;
int spaces = 0;
for (total = 0; (ch = in.read()) != -1; total++) { if (Character.isWhitespace((char) ch))
spaces++;
}
System.out.println(total + " символов, " + spaces + " пробелов ");
}}
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

Writer
26• Абстрактный класс Writer обеспечивает поддержку символьного потока записи
аналогично тому, как это делает OutputStream, реализующий модель байтового потока вывода, и многие методы Writer схожи с теми, которые объявлены в составе OutputStream, однако, помимо этого, в классе Writer предусмотрены некоторые другие полезные версии метода write
public void write(int ch) throws IOException
Записывает ch в виде символа. Символ передаётся как значение int, но записывается только 16 битов последнего
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

|
Writer |
27 |
public abstract void write(char[] buf, int offset, int |
|
|
|
count) throws IOException |
|
Записывает count символов массива buf, начиная с |
|
элемента buf[offset] |
|
public void write(char[] buf) throws IOException |
|
Метод аналогичен предыдущему при условии write(buf, 0, |
|
buf.length) |
|
public void write(String str, int offset, int count) throws |
|
IOException |
|
Записывает count символов строки str, начиная с символа |
|
str.charAt(offset) |
|
public void write(String str) throws IOException |
|
Метод аналогичен предыдущему при условии write(str, 0, |
|
str.length()) |
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

Writer
28 |
public abstract void flush() throws IOException |
|
|
|
Осуществляет сброс потока. Единственный |
|
вызов flush приводит к сбросу всех буферов в |
|
цепочке взаимосвязанных потоков. Если поток не |
|
относится к категории буферизированных, |
|
никакие действия не выполняются |
|
public abstract void close() throws IOException |
|
Закрывает ранее открытый поток записи, |
|
выполняя при необходимости его сброс. Метод |
|
используется для высвобождения ресурсов, |
|
связанных с потоком. Любые попытки обращения |
|
к закрытому потоку приводят к выбрасыванию |
|
исключения типа IOException, но повторное |
|
закрытие потока эффектов не вызывает |
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

Writer
29• Классы, производные от Writer, обязаны обеспечить реализацию варианта метода write(), связанного с записью символов из части массива, а также методов
close() и flush()
•Все остальные методы Writer основаны на этих трёх
•Это отличает Writer от OutputStream, в котором в качестве базового метода вывода предусмотрен вариант write(), осуществляющий вывод одного байта, а для методов close() и flush ()предложены реализации по умолчанию
•Производительность операций может быть улучшена за счёт переопределения в производных классах и других методов
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

Символьные и стандартные потоки
30• Стандартные потоки
System.in
System.out
System.err
существовали в Java ещё до появления в языке символьных потоков
•Поэтому стандартные потоки относятся к категории байтовых
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |