Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Haulmont-презентации Java / Haulmont. java_se_4.ppt
Скачиваний:
54
Добавлен:
16.03.2015
Размер:
1.16 Mб
Скачать

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

Соседние файлы в папке Haulmont-презентации Java