Spec-Zone.ru › OpenJDK 25

Класс Reader

java.lang.Object
java.io.Reader
Все реализуемые интерфейсы:
Closeable, AutoCloseable, Readable
Прямые известные подклассы:
BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader
public abstract class Reader extends Object implements Readable, Closeable
Абстрактный класс для чтения символьных потоков. Единственные методы, которые должен реализовать подкласс, — это read(char[], int, int) и close(). Однако большинство подклассов переопределяют некоторые из определённых здесь методов, чтобы обеспечить более высокую эффективность, дополнительную функциональность или и то и другое.
Начиная с:
1.1
См. также:
  • BufferedReader
  • LineNumberReader
  • CharArrayReader
  • InputStreamReader
  • FileReader
  • FilterReader
  • PushbackReader
  • PipedReader
  • StringReader
  • Writer

Краткое описание полей

Модификатор и тип Поле Описание
protected Object lock
Объект, используемый для синхронизации операций с этим потоком.

Краткое описание конструкторов

Reader()
Reader(Object lock)
Модификатор Конструктор Описание
protected
Создаёт новый читатель символьного потока, критические секции которого синхронизируются на самом читателе.
protected
Создаёт новый читатель символьного потока, критические секции которого синхронизируются на указанном объекте.

Краткое описание методов

Модификатор и тип Метод Описание
abstract void close()
Закрывает поток и освобождает все связанные с ним системные ресурсы.
void mark(int readAheadLimit)
Помечает текущую позицию в потоке.
boolean markSupported()
Сообщает, поддерживает ли этот поток операцию mark().
static Reader nullReader()
Возвращает новый Reader, который не считывает символы.
static Reader of(CharSequence cs)
Возвращает Reader, который считывает символы из CharSequence.
int read()
Считывает один символ.
int read(char[] cbuf)
Считывает символы в массив.
abstract int read(char[] cbuf, int off, int len)
Считывает символы в часть массива.
int read(CharBuffer target)
Пытается считать символы в указанный символьный буфер.
String readAllAsString()
Считывает все оставшиеся символы в строку.
List<String> readAllLines()
Считывает все оставшиеся символы в виде строк текста.
boolean ready()
Сообщает, готов ли этот поток к чтению.
void reset()
Сбрасывает поток.
long skip(long n)
Пропускает символы.
long transferTo(Writer out)
Считывает все символы из этого читателя и записывает их в указанный писатель в том же порядке.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание полей

lock

protected Object lock
Объект, используемый для синхронизации операций с этим потоком. Для повышения эффективности объект символьного потока может использовать для защиты критических секций объект, отличный от самого себя. Поэтому подклассу следует использовать объект из этого поля, а не this или синхронизированный метод.

Подробное описание конструкторов

Reader

protected Reader()
Создаёт новый читатель символьного потока, критические секции которого синхронизируются на самом читателе.

Reader

protected Reader(Object lock)
Создаёт новый читатель символьного потока, критические секции которого синхронизируются на указанном объекте.
Параметры:
lock — объект Object, на котором выполняется синхронизация.

Подробное описание методов

nullReader

public static Reader nullReader()
Возвращает новый Reader, который не считывает символы. Возвращаемый поток изначально открыт. Поток закрывается вызовом метода close(). Последующие вызовы close() не оказывают эффекта.

Пока поток открыт, методы read(), read(char[]), read(char[], int, int), read(CharBuffer), ready(), skip(long) и transferTo() ведут себя так, как если бы был достигнут конец потока. После закрытия потока все эти методы выбрасывают IOException.

Метод markSupported() возвращает false. Методы mark() и reset() выбрасывают IOException.

Объект object, используемый для синхронизации операций с возвращаемым Reader, не определён.

Возвращает:
Reader, который не считывает символы
Начиная с:
11

of

public static Reader of(CharSequence cs)
Возвращает Reader, который считывает символы из CharSequence. Читатель изначально открыт, а чтение начинается с первого символа последовательности.

Возвращаемый читатель поддерживает операции mark() и reset().

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

Если последовательность изменится, пока читатель открыт (например, изменится её длина), поведение не определено.

Параметры:
cs — CharSequence, предоставляющий символьный поток.
Возвращает:
Reader, который считывает символы из cs
Выбрасывает:
NullPointerException — если cs имеет значение null
Начиная с:
24

read

public int read(CharBuffer target) throws IOException
Пытается считать символы в указанный символьный буфер. Буфер используется как хранилище символов без изменений: единственные изменения — результаты операции put. Переворачивание или перемотка буфера не выполняются. Если длина указанного символьного буфера равна нулю, символы считываться не будут и будет возвращён ноль.
Определено в:
read в интерфейсе Readable
Параметры:
target — буфер, в который считываются символы
Возвращает:
Количество символов, добавленных в буфер (возможно, ноль), или -1, если источник символов исчерпан
Выбрасывает:
IOException — если возникает ошибка ввода-вывода
NullPointerException — если target равен null
ReadOnlyBufferException — если target — буфер только для чтения, даже если его длина равна нулю
Начиная с:
1.5

read

public int read() throws IOException
Считывает один символ. Этот метод блокирует выполнение до тех пор, пока символ не станет доступен, не произойдёт ошибка ввода-вывода или не будет достигнут конец потока.

Подклассам, которым требуется эффективный ввод отдельных символов, следует переопределить этот метод.

Возвращает:
Считанный символ в виде целого числа в диапазоне от 0 до 65535 (0x00-0xffff) или -1, если достигнут конец потока
Выбрасывает:
IOException — если возникает ошибка ввода-вывода

read

public int read(char[] cbuf) throws IOException
Считывает символы в массив. Этот метод блокирует выполнение до тех пор, пока не появятся входные данные, не произойдёт ошибка ввода-вывода или не будет достигнут конец потока.

Если длина cbuf равна нулю, символы не считываются и возвращается 0; в противном случае предпринимается попытка считать хотя бы один символ. Если символы недоступны, поскольку достигнут конец потока, возвращается значение -1; иначе считывается хотя бы один символ и сохраняется в cbuf.

Параметры:
cbuf — буфер назначения
Возвращает:
Количество считанных символов или -1, если достигнут конец потока
Выбрасывает:
IOException — если возникает ошибка ввода-вывода

read

public abstract int read(char[] cbuf, int off, int len) throws IOException
Считывает символы в часть массива. Этот метод блокирует выполнение до тех пор, пока не появятся входные данные, не произойдёт ошибка ввода-вывода или не будет достигнут конец потока.

Если len равен нулю, символы не считываются и возвращается 0; в противном случае предпринимается попытка считать хотя бы один символ. Если символы недоступны, поскольку достигнут конец потока, возвращается значение -1; иначе считывается хотя бы один символ и сохраняется в cbuf.

Параметры:
cbuf — буфер назначения
off — смещение, с которого начинается сохранение символов
len — максимальное количество считываемых символов
Возвращает:
Количество считанных символов или -1, если достигнут конец потока
Выбрасывает:
IndexOutOfBoundsException — если off отрицателен, len отрицателен или len больше cbuf.length - off
IOException — если возникает ошибка ввода-вывода

readAllLines

public List<String> readAllLines() throws IOException
Считывает все оставшиеся символы в виде строк текста. Этот метод блокирует выполнение до тех пор, пока не будут считаны все оставшиеся символы и не будет обнаружен конец потока либо пока не будет выброшено исключение. Этот метод не закрывает читатель.

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

Строка — это либо последовательность из нуля или более символов, за которой следует разделитель строк, либо последовательность из одного или более символов, за которой следует конец потока. Разделитель строк не входит в строку.

Разделителем строк является один из следующих символов: перевод строки "\n" (U+000A), возврат каретки "\r" (U+000D) или возврат каретки, за которым непосредственно следует перевод строки "\r\n" (U+000D U+000A).

Поведение в случае асинхронного закрытия читателя или прерывания потока во время чтения зависит от конкретной реализации читателя и поэтому не определено.

При возникновении ошибки ввода-вывода во время чтения из потока она может возникнуть после считывания некоторых, но не всех символов. Следовательно, поток может не находиться в конце и может быть в несогласованном состоянии. В случае ошибки ввода-вывода настоятельно рекомендуется незамедлительно закрыть читатель.

Примечание к API:
Этот метод предназначен для простых случаев, когда уместно и удобно считать все входные данные в список строк. Он не подходит для чтения данных из неизвестного источника, поскольку это может привести к выделению произвольного объёма памяти.
Возвращает:
оставшиеся символы в виде строк текста, сохранённых в немодифицируемом List из String в порядке их считывания
Выбрасывает:
IOException — если возникает ошибка ввода-вывода
OutOfMemoryError — если количество оставшихся символов превышает ограничение реализации для String.
Начиная с:
25
См. также:
  • String.lines()
  • readAllAsString()
  • Files.readAllLines(Path, Charset)

readAllAsString

public String readAllAsString() throws IOException
Считывает все оставшиеся символы в строку. Этот метод блокирует выполнение до тех пор, пока не будут считаны все оставшиеся символы, включая все разделители строк, и не будет обнаружен конец потока либо пока не будет выброшено исключение. Полученная строка будет содержать разделители строк в том виде, в каком они представлены в потоке. Этот метод не закрывает читатель.

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

Поведение в случае асинхронного закрытия читателя или прерывания потока во время чтения зависит от конкретной реализации читателя и поэтому не определено.

При возникновении ошибки ввода-вывода во время чтения из потока она может возникнуть после считывания некоторых, но не всех символов. Следовательно, поток может не находиться в конце и может быть в несогласованном состоянии. В случае ошибки ввода-вывода настоятельно рекомендуется незамедлительно закрыть читатель.

Примечание к API:
Этот метод предназначен для простых случаев, когда уместно и удобно считать все входные данные в String. Он не подходит для чтения данных из неизвестного источника, поскольку это может привести к выделению произвольного объёма памяти.
Возвращает:
String, содержащую все оставшиеся символы
Выбрасывает:
IOException — если возникает ошибка ввода-вывода
OutOfMemoryError — если количество оставшихся символов превышает ограничение реализации для String.
Начиная с:
25
См. также:
  • readAllLines()
  • Files.readString(Path)

skip

public long skip(long n) throws IOException
Пропускает символы. Этот метод блокирует выполнение до тех пор, пока не появятся символы, не произойдёт ошибка ввода-вывода или не будет достигнут конец потока. Если поток уже находится в конце до вызова этого метода, символы не пропускаются и возвращается ноль.
Параметры:
n — количество символов, которое необходимо пропустить
Возвращает:
Фактическое количество пропущенных символов
Выбрасывает:
IllegalArgumentException — если n отрицателен.
IOException — если возникает ошибка ввода-вывода

ready

public boolean ready() throws IOException
Сообщает, готов ли этот поток к чтению.
Возвращает:
true, если гарантируется, что следующий вызов read() не будет блокироваться в ожидании входных данных; в противном случае — false. Обратите внимание: возвращаемое значение false не гарантирует, что следующий вызов read будет блокироваться.
Выбрасывает:
IOException — если возникает ошибка ввода-вывода

markSupported

public boolean markSupported()
Сообщает, поддерживает ли этот поток операцию mark(). Реализация по умолчанию всегда возвращает false. Подклассам следует переопределить этот метод.
Возвращает:
true тогда и только тогда, когда этот поток поддерживает операцию mark.

mark

public void mark(int readAheadLimit) throws IOException
Помечает текущую позицию в потоке. Последующие вызовы reset() будут пытаться переместить поток в эту позицию. Не все потоки символьного ввода поддерживают операцию mark().
Параметры:
readAheadLimit — ограничение на количество символов, которые можно считать с сохранением метки. После считывания этого количества символов попытка сбросить поток может завершиться неудачей.
Выбрасывает:
IOException — если поток не поддерживает mark() или возникает другая ошибка ввода-вывода

reset

public void reset() throws IOException
Сбрасывает поток. Если поток был помечен, предпринимается попытка переместить его к метке. Если поток не был помечен, предпринимается попытка сбросить его подходящим для конкретного потока способом, например переместив его в начальную позицию. Не все потоки символьного ввода поддерживают операцию reset(), а некоторые поддерживают reset() без поддержки mark().
Выбрасывает:
IOException — если поток не был помечен, метка стала недействительной, поток не поддерживает reset() или возникает другая ошибка ввода-вывода

close

public abstract void close() throws IOException
Закрывает поток и освобождает все связанные с ним системные ресурсы. После закрытия потока последующие вызовы read(), ready(), mark(), reset() или skip() выбрасывают IOException. Повторное закрытие уже закрытого потока не оказывает эффекта.
Определено в:
close в интерфейсе AutoCloseable
Определено в:
close в интерфейсе Closeable
Выбрасывает:
IOException — если возникает ошибка ввода-вывода

transferTo

public long transferTo(Writer out) throws IOException
Считывает все символы из этого читателя и записывает их в указанный писатель в том же порядке. По завершении этот читатель будет находиться в конце потока. Этот метод не закрывает ни читатель, ни писатель.

Этот метод может блокироваться на неопределённое время при чтении из читателя или записи в писатель. Поведение в случае асинхронного закрытия читателя и/или писателя либо прерывания потока во время передачи зависит от конкретных реализаций читателя и писателя и поэтому не определено.

Если общее количество переданных символов превышает Long.MAX_VALUE, будет возвращено Long.MAX_VALUE.

Если при чтении из читателя или записи в писатель возникает ошибка ввода-вывода, это может произойти после считывания или записи некоторых символов. Следовательно, читатель может не находиться в конце потока, а один или оба потока могут быть в несогласованном состоянии. В случае ошибки ввода-вывода настоятельно рекомендуется незамедлительно закрыть оба потока.

Параметры:
out — писатель, не равный null
Возвращает:
количество переданных символов
Выбрасывает:
IOException — если при чтении или записи возникает ошибка ввода-вывода
NullPointerException — если out имеет значение null
Начиная с:
10

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/io/Reader.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API