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

Потоки Piped

41Канал, прежде чем блокировать текущий поток вычислений, проверяет, «жив» ли поток на другом конце канала

Если обнаруживается, что работа противоположного потока вычислений прекращена, текущий поток генерирует исключение типа IOException

Потоки Piped должны быть связаны друг с другом

Это можно сделать при создании потоков, передав конструктору потока PipedReader в качестве аргумента ссылку на поток PipedWriter (и наоборот, порядок несущественен) или позднее, используя метод connect()

При попытках использования потоков Piped до их соединения или связывания ранее соединённых потоков выбрасывается исключение типа IOException

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Байтовые потоки ByteArray

42• Массивы байтов, размещённые в оперативной памяти, могут выступать в

роли источника или получателя данных при работе с потоками семейства ByteArray

Объект класса ByteArrayInputStream

использует массив типа byte в качестве источника данных

В составе класса ByteArrayOutputStream

предусмотрены средства динамического наращивания объёма массива типа byte, получающего выводимые данные

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Символьные потоки CharArray и

String

43 • Символьные потоки семейства CharArray (CharArrayReader и CharArrayWriter) аналогичны по назначению потокам ByteArray – они позволяют в качестве источника или получателя данных использовать массивы типа char, размещённые в памяти

В составе класса CharArrayWriter предусмотрены средства динамического наращивания объёма массива типа char, получающего выводимые данные

Объект класса StringReader позволяет считывать символы из строки String

Объект класса StringWriter позволяет записывать символы в буфер, который может интерпретироваться как объект типа String или StringBuffer

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Потоки Print

44• Классы семейства Print – PrintStream и PrintWriter

содержат объявление ряда методов, которые упрощают задачу вывода (записи) в поток значений

простых типов и объектов в удобочитаемом текстовом формате

В потоковых классах Print реализованы перегруженные версии методов print() и println() для вывода следующих значений типов – char, char[], int, long, float, double, Object, String, boolean

Эти методы гораздо удобнее для применения, нежели обычные методы потокового вывода (записи) write()

Метод println() добавляет в конец порции выводимых данных, переданной в виде параметра, признак завершения строки (без параметров просто завершает текущую строку)

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Потоки Print

45• Каждый из потоков Print действует как поток Filter, и поэтому в процессе вывода данные могут быть подвержены дополнительной фильтрации

Класс PrintStream работает с байтовыми потоками, а PrintWriter – с символьными

Поскольку чаще возникает потребность в записи символов, в обычных ситуациях следует пользоваться средствами класса PrintWriter

Одна из важных характеристик поведения потоков Print связана с тем, что ни один из реализованных в них методов вывода (записи) не выбрасывает исключения типа IOException

Если при передаче данных «внутреннему» потоку возникает ошибка, методы завершают выполнение нормальным образом

Проверить наличие ошибки можно с помощью вызова метода checkError(), возвращающего результат типа boolean

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Класс StreamTokenizer

46• Задачи лексического анализа потока данных относятся к числу традиционных и в составе пакета java.io представлен класс StreamTokenizer, позволяющий решать некоторые из них

Поток разбивается на лексемы с помощью объекта StreamTokenizer, конструктор которого принимает в качестве параметра объект типа Reader, выполняющий функцию источника данных; объект StreamTokenizer действует в соответствии с заданными параметрами сканирования данных

На каждой итерации цикла сканирования вызывается метод nextToken(), который возвращает очередную считанную из потока лексему и информацию о её типе, присваивая эти данные полям объекта StreamTokenizer

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Класс StreamTokenizer

47• Класс StreamTokenizer ориентирован преимущественно на анализ текстов, представляющих код, написанный на каком-

либо языке программирования; класс нельзя отнести к числу инструментов лексического анализа общего назначения

Когда метод nextToken распознаёт лексему, он возвращает её тип в виде значения и присваивает последнее полю ttype

Существует четыре типа лексем, воспринимаемых методом nextToken():

TT_WORD; обнаружено слово; оно

сохраняется в поле sval типа String

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

 

Класс StreamTokenizer

48

TT_NUMBER; обнаружено число; оно

 

 

сохраняется в поле nval типа double;

 

распознаются только десятичные числа с

 

плавающей запятой (с десятичной точкой

 

или без таковой) в нормальной нотации

 

(анализатор не распознает ни 3.4е79 как

 

число с плавающей запятой, ни 0xffff как

 

шестнадцатеричное число)

 

TT_EOL; обнаружен признак завершения

 

строки

 

TT_EOF; достигнут конец файла

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Класс StreamTokenizer

49• Подразумевается, что текст, подлежащий анализу, состоит из байтов, значение которых относятся к диапазону от \u0000 до \u00FF, - корректность распознавания символов Unicode, не принадлежащих указанному интервалу, не гарантируется

Поток ввода включает специальные и обычные символы

К категории специальных относятся те символы, которые анализатор трактует специальным образом, а именно: символы пробела, символы, обозначающие числа и слова, и т.д.

Любой другой символ воспринимается как обычный

Когда очередным символом потока является обычный символ, в качестве его типа возвращается значение этого символа

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Класс StreamTokenizer

50 Пример 3

static double sumStream(Reader in) throws IOException {

StreamTokenizer nums = new StreamTokenizer(in); double result = 0.0;

while (nums.nextToken() != StreamTokenizer.TT_EOF) {

if (nums.ttype == StreamTokenizer.TT_NUMBER)

result += nums.nval;

}

return result;

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

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