- •Ввод-вывод. Сериализация
- •Цели занятия
- •Ввод-вывод
- •Ввод-вывод
- •Ввод-вывод
- •Ввод-вывод
- •Ввод-вывод
- •Байтовые потоки
- •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
- •Сериализация объектов
- •Сериализация объектов
- •Сериализация объектов
- •Подготовка классов к
- •Подготовка классов к
- •Подготовка классов к
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Настройка механизма
- •Настройка механизма
- •Настройка механизма
- •Настройка механизма
- •Контроль версий объектов
- •Контроль версий объектов
- •Контроль версий объектов
- •Контроль версий объектов
- •Литература
InputStream
11 |
public int read(byte[] buf) throws |
|
|
|
IOException |
|
Метод аналогичен предыдущему при |
|
условии read(buf, 0, buf.length) |
|
public long skip(long count) throws |
|
IOException |
|
Пропускает, самое большее, count байтов |
|
либо часть последовательности байтов до |
|
конца потока. Возвращает количество |
|
фактически пропущенных байтов. Если |
|
значение count отрицательно, операция |
|
не выполняется |
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
InputStream
12 |
public int available() throws IOException |
|
|
|
Возвращает количество байтов, которые могут |
|
быть введены или пропущены, не вызывая |
|
блокировки. Реализация метода, предлагаемая |
|
по умолчанию, возвращает значение 0 |
|
public void close() throws IOException |
|
Закрывает ранее открытый поток ввода. Метод |
|
используется для высвобождения ресурсов, |
|
связанных с потоком. Обращение к закрытому |
|
потоку приводит к выбрасыванию исключения |
|
типа IOException, но повторное закрытие |
|
потока эффектов не вызывает. В реализации |
|
метода, предлагаемой по умолчанию, никакие |
|
действия не предусмотрены |
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
InputStream
13• При реализации InputStream требуется, чтобы производный класс обеспечил практическое воплощение варианта метода read(), осуществляющего ввод единственного байта, поскольку остальные версии read() основываются на первой
•Во многих случаях, однако, производительность операций может быть улучшена за счёт переопределения и других методов
•Исходные версии методов available() и close() нуждаются в переопределении в соответствии с потребностями конкретных типов потоков
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
InputStream
14 Пример 1
import java.io.*; class CountBytes {
public static void main(String[] args) throws IOException { InputStream in;
if (args.length == 0) in = System.in;
else
in = new FileInputStream(args[0]); int total = 0;
while (in.read() != -1) total++;
System.out.println(total + " байтов");
}}
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
OutputStream
15• Абстрактный класс OutputStream во многом аналогичен классу InputStream; он предлагает модель вывода байтовых данных в объект - получатель.
Методы класса OutputStream перечислены ниже:
public abstract void write(int b) throws IOException
Выводит значение b в виде байта. В качестве параметра передаётся именно int, поскольку значение часто является результатом выполнения арифметических операций над аргументами byte. Выражение, операнды которого относятся к типу byte, обладает типом int, поэтому объявление параметра в виде int означает возможность избежать необходимости использования операций явного преобразования результатов вычисления выражения к типу byte. Следует заметить, однако, что выводится только 8 младших битов результат типа int
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
|
|
OutputStream |
16 |
|
public void write(byte[] buf, int offset, int |
|
||
|
|
count) throws IOException |
|
|
Выводит count байтов массива buf, начиная с |
|
|
элемента buf[offset] |
|
|
public void write(byte[] buf) throws IOException |
|
|
Метод аналогичен предыдущему при условии |
|
|
write(buf, 0, buf.length) |
|
|
public void flush() throws IOException |
|
|
Осуществляет сброс потока. Единственный вызов |
|
|
flush приводит к сбросу всех буферов в цепочке |
взаимосвязанных потоков. Если поток не относится к категории буферизированных, реализация метода, предлагаемая по умолчанию, не предусматривает выполнения каких бы то ни было действий
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
OutputStream
17public void close() throws IOException
Закрывает ранее открытый поток вывода. Метод
используется для высвобождения ресурсов, связанных с потоком. Любые попытки обращения к закрытому потоку приводят к выбрасыванию исключения типа IOException, но повторное закрытие потока эффектов не вызывает. В реализации метода, предлагаемой по умолчанию, никакие действия не предусмотрены
•При реализации OutputStream требуется, чтобы производный класс обеспечил практическое воплощение варианта метода write(), осуществляющего вывод единственного байта, поскольку остальные версии write основываются на первой
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
OutputStream
18• Во многих случаях, однако, производительность операций может быть
улучшена за счёт переопределения и других методов
•Исходные версии методов flush() и close() нуждаются в переопределении в соответствии с потребностями конкретных типов потоков - в частности, перед закрытием буферизованного потока разумно выполнять его сброс
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Символьные потоки
19• Абстрактными классами, обеспечивающими чтение и запись символьных потоков, являются Reader и Writer
•В каждом из них предусмотрены методы, схожие с «собратьями» из состава классов, представляющих байтовые потоки
•Классы символьных потоков появились в составе Java после реализации байтовых потоков и имели целью обеспечение полной поддержки таблиц символов Unicode
•Как и в случае байтовых потоков, по окончании использования символьного потока его следует закрывать, чтобы высвободить используемые им системные ресурсы
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Reader
20• Абстрактный класс Reader обеспечивает поддержку символьного потока чтения аналогично тому, как это
делает InputStream, реализующий модель байтового потока ввода, и методы Reader схожи с теми, которые объявлены в составе InputStream
public int read() throws IOException
Считывает один символ данных и возвращает его в виде целого числа из диапазона от 0 до 65535. Если символов, готовых для чтения, не существует ввиду достижения конца потока, возвращается значение -1. Метод выполняет блокировку до тех пор, пока имеются доступные для чтения символы, не достигнут конец потока либо не выброшено исключение
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
