- •Ввод-вывод. Сериализация
- •Цели занятия
- •Ввод-вывод
- •Ввод-вывод
- •Ввод-вывод
- •Ввод-вывод
- •Ввод-вывод
- •Байтовые потоки
- •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
- •Сериализация объектов
- •Сериализация объектов
- •Сериализация объектов
- •Подготовка классов к
- •Подготовка классов к
- •Подготовка классов к
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Порядок сериализации и
- •Настройка механизма
- •Настройка механизма
- •Настройка механизма
- •Настройка механизма
- •Контроль версий объектов
- •Контроль версий объектов
- •Контроль версий объектов
- •Контроль версий объектов
- •Литература
InputStreamReader и
OutputStreamWriter
31• Эти классы обеспечивают возможность преобразования байтовых потоков ввода в
символьные потоки чтения и символьных потоков записи в байтовые потоки вывода соответственно, с учётом заданной кодировки символов или кодировки, принятой по умолчанию в конкретной локальной системе
•Объекту InputStreamReader в качестве источника передаётся байтовый поток ввода, и InputStreamReader обеспечивает чтение соответствующих символов Unicode
•Объекту OutputStreamWriter в качестве получателя передаётся байтовый поток вывода, и OutputStreamWriter сохраняет в нём байтовые представления символов Unicode
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
InputStreamReader и
OutputStreamWriter
32• Методы read() класса InputStreamReader обеспечивают ввод байтов из заданного потока InputStream и преобразование их в символы с использованием соответствующей кодировки
•Аналогично, методы write() класса OutputStreamWriter получают переданные символы, преобразуют их в байты, используя соответствующую кодировку, и выводят в заданный поток OutputStream
•В обоих классах при закрытии потока- преобразователя также закрывается и связанный с ним байтовый поток
•Такое поведение не всегда желательно (например, при преобразовании данных из стандартных потоков)
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
InputStreamReader и
OutputStreamWriter
33• Классы FileReader и FileWriter являются расширенными версиями классов InputStreamReader и OutputStreamWriter соответственно и обеспечивают возможности обработки файловых данных с поддержкой Unicode и локальных стандартов кодировки символов
•Классов ReaderInputStream и WriterOutputStream, которые могли бы обеспечить трансляцию символьных потоков в байтовые и наоборот, не существует
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Краткий обзор классов потоков
Потоки Filter
34• Классы семейства фильтрованных потоков Filter –
FilterInputStream, FilterOutputStream,
FilterReader и FilterWriter – позволяют объединять потоки в цепочки для получения составных потоков, обладающих расширенным набором функций
•Каждый фильтрованный поток данных привязывается к другому потоку, которому передаёт полномочия по фактическому выполнению операций ввода или вывода
•Позволяется связывать в единую цепочку любое количество байтовых (символьных) Filter-потоков ввода (чтения)
•Источником исходных данных может быть поток, не относящийся к семейству потоков Filter
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Потоки Filter
35• Подобным образом могут соединяться в цепочки и Filter-потоки вывода (записи)
•Все потоки вывода (записи) в цепочке, начиная с первого и заканчивая предпоследним, должны относиться к классу Filter, но последним может быть объект любого потокового класса вывода (записи)
•Не все классы семейства Filter в действительности осуществляют изменение данных
•Некоторые просто привносят дополнительные черты поведения, а другие предлагают новые интерфейсы взаимодействия с потоками
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Потоки Buffered
36 • Классы семейства буферизованных потоков Buffered – BufferedInputStream,
BufferedOutputStream, BufferedReader и BufferedWriter – осуществляют буферизацию данных, позволяющую избежать необходимости обращения к источнику (получателю) данных при выполнении каждой отдельной операции read() или write()
•Эти классы часто используются в сочетании с потоками семейства File: доступ к данным на диске выполняется намного медленнее, чем к информации в буфере памяти, и средства буферизации помогают снизить потребность в
обращениях к диску
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Потоки Buffered
37• Когда метод read() потока Buffered, вызываемый для ввода (чтения) данных, обнаруживает, что буфер потока пуст, он вызывает одноимённый метод потока источника, заполняет буфер настолько большой порцией данных, насколько
это возможно и возвращает запрошенные данные из буфера
•При очередных обращениях к методу read() объекта Buffered данные будут извлекаться из буфера, пока его содержимое не исчерпается, и в этот момент объекту вновь придётся вызвать read() потока-источника
•Процесс повторяется до тех пор, пока не иссякнет источник данных
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Потоки Buffered
38• Buffered – потоки вывода (записи) ведут себя аналогичным образом
•Когда write() заполняет буфер данных, вызывается одноимённый метод потока- получателя, освобождающий буфер
•Такой механизм буферизации помогает превратить последовательность запросов на вывод (запись) небольших порций данных, адресуемых объекту Buffered, в единственный вызов метода write() потока- получателя
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Потоки Piped
39• Канальные потоки, определяемые классами семейства Piped - PipedInputStream,
PipedOutputStream, PipedReader и PipedWriter – используются в виде пар ввода-
вывода (записи-чтения)
•Данные, переданные в поток вывода (записи), служат источником для потока ввода (чтения)
•Каналы реализуют механизм обмена данными между различными потоками вычислений
•Единственный безопасный способ обращения с потоками данных Piped связан с использованием двух потоков вычислений: один из них осуществляет вывод данных, а другой – их ввод
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Потоки Piped
40• Когда буфер канала полностью заполняется, попытка вывода данных в него приводит к блокированию соответствующего потока вычислений
•Если операции вывода и ввода выполняются одним потоком вычислений, тот будет блокирован постоянно
•Поток вычислений, осуществляющий ввод, блокируется, если буфер канала пуст
•Чтобы избежать опасности «вечного» блокирования одного потока вычислений, когда его «собрат» на другом конце канала прекращает работу, каждый канал отслеживает подлинность и работоспособность потоков вычислений, обращавшихся к нему с целью вывода и ввода данных последними
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
