Шаг 94.
Язык программирования Java.
Классы Reader и Writer

На этом шаге мы рассмотрим классы Reader и Writer

Классы потоков ввода-вывода байтов предоставляют необходимые функциональные возможности для выполнения операций ввода-вывода любого типа, но они не в состоянии оперировать непосредственно символами в Юникоде. А поскольку одной из главных целей Java является соблюдение принципа «написано однажды, выполняется везде», то в Java пришлось внедрить поддержку непосредственно ввода-вывода символов. На этом шаге мы рассмотрим ряд классов, предназначенных для ввода-вывода символов.

Класс Reader является абстрактным и определяет потоковый ввод символов в Java. Он реализует интерфейсы AutoCloseable, Closeable и Readable. Все методы этого класса, за исключением метода markSupported(), генерируют исключение типа IOException при возникновении ошибок. В таблице 1 приведена краткая информация о методах их класса Reader.

Таблица 1. Методы из класса Reader
Функция Описание
abstract void close() Закрывает поток ввода. При последующих попытках чтения данных из этого потока ввода генерируется исключение типа IOException.
void mark(int count) Размещает на текущей позиции в потоке ввода метку, которая остается достоверной до тех пор, пока не будет прочитано заданное количество символов count.
boolean marSupported() Возвращает логическое значение true, если в потоке ввода поддерживаются методы mark() и reset().
int read() Возвращает целочисленное представление следующего символа, доступного в вызывающем потоке ввода. По достижении конца файла возвращается значение -1.
int read(char[] b) Пытается прочитать в указанный буфер b количество символов, равное размеру буфера, возвращая количество успешно прочитанных символов. По достижении конца файла возвращается значение -1.
int read(CharBuffer b) Пытается прочитать символы в указанный буфер b, возвращая количество успешно прочитанных символов. По достижении конца файла возвращается значение -1.
abstract int read(char[] b, int start, int count) Пытается прочитать в указанный буфер b количество символов, равное параметру count, начиная с позиции start. Возвращает количество успешно прочитанных символов. По достижении конца файла возвращается значение -1.
boolean ready() Возвращает логическое значение true, если следующий запрос на ввод не будет ждать, и false – в противном случае.
void reset() Перемещает указатель ввода на установленную ранее метку.
long skip(long count) Пропускает заданное для ввода количество символов, переданное функции в параметре count. Возвращает количество фактически пропущенных символов.

Класс Writer является абстрактным и определяет потоковый вывод символов в Java. Этот класс реализует интерфейсы AutoCloseable, Closeable, Flushable и Appendable. При возникновении ошибок все методы этого класса генерируют исключение типа IOException. В таблице 2 приведена краткая сводка методов из класса Writer.

Таблица 2. Методы из класса Writer
Функция Описание
Writer append(char symbol) Присоединяет указанный символ в конце вызывающего потока вывода. Возвращает ссылку на вызывающий поток вывода.
Writer append(CharSequence symbols) Присоединяет указанные символы в конце вызывающего потока вывода. Возвращает ссылку на вызывающий поток вывода.
Writer append(CharSequence symbols, int start, int end) Присоединяет указанные символы в конце вызывающего потока вывода из промежутка [start, end - 1]. Возвращает ссылку на вызывающий поток вывода.
abstract void close() Закрывает вызывающий поток вывода. Последующие попытки вывода в этот поток приведут к генерированию исключения типа IOException.
abstract void flush() Делает конечным состояние вывода, очищая все буфера, в том числе и буфера вывода.
void write(int symbol) Записывает указанный символ в вызывающий поток вывода. Обратим внимание на то, что параметр symbol относится к типу int, что позволяет вызывать метод write() в выражении, не прибегая к приведению, обратно к типу char. Стоит заметить, что в таком случае будет выводиться только первые 16 младших битов указанного числа.
void write(char[] b) Записывает буфер b в вызывающий поток вывода.
void write(char[] b, int start, int count) Записывает буфер b в вызывающий поток вывода начиная с позиции start и заданное количество символов count.
void write(String s) Записывает указанную строку в вызывающий поток вывода.
void write(String s, int start, int count) Записывает указанную строку в вызывающий поток вывода начиная с позиции start и заданное количество символов count.

На следующем шаге мы рассмотрим класс FileReader

Предыдущий шаг Содержание Следующий шаг