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

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

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