Класс BufferedReader
- Все реализуемые интерфейсы:
Closeable, AutoCloseable, Readable
- Прямые известные подклассы:
LineNumberReader
public class BufferedReader extends Reader
Размер буфера можно задать явно или использовать размер по умолчанию. Размер по умолчанию подходит для большинства случаев.
Обычно каждый запрос на чтение, выполняемый для Reader, приводит к соответствующему запросу на чтение из базового потока символов или байтов. Поэтому рекомендуется оборачивать Reader в BufferedReader, если операции read() с ним могут быть затратными, например для FileReader и InputStreamReader. Например:
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
read() или readLine() может приводить к чтению байтов из файла, преобразованию их в символы и последующему возврату, что может быть крайне неэффективно. Программы, использующие DataInputStream для текстового ввода, можно локализовать, заменив каждый DataInputStream подходящим BufferedReader.
- Примечание к API:
- После оборачивания в
BufferedReaderбазовыйReaderне следует использовать напрямую или оборачивать в другой Reader. - С версии:
- 1.1
- См. также:
Краткое описание полей
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
BufferedReader |
Создает буферизованный поток ввода символов, использующий буфер ввода размера по умолчанию. |
BufferedReader |
Создает буферизованный поток ввода символов, использующий буфер ввода заданного размера. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Закрывает поток и освобождает все связанные с ним системные ресурсы. |
Stream |
lines() |
Возвращает Stream, элементы которого — строки, прочитанные из этого BufferedReader. |
void |
mark |
Помечает текущую позицию в потоке. |
boolean |
markSupported() |
Сообщает, поддерживает ли этот поток операцию mark(); поток ее поддерживает. |
int |
read() |
Считывает один символ. |
int |
read |
Считывает символы в часть массива. |
String |
readLine() |
Считывает строку текста. |
boolean |
ready() |
Сообщает, готов ли этот поток к чтению. |
void |
reset() |
Возвращает поток к последней установленной отметке. |
Методы, объявленные в классе Reader
nullReader, of, read, read, readAllAsString, readAllLines, skip, transferTo
Подробное описание конструкторов
BufferedReader
public BufferedReader(Reader in, int sz)
- Параметры:
-
in— Reader -
sz— Размер буфера ввода - Исключения:
-
IllegalArgumentException— еслиsz <= 0
BufferedReader
public BufferedReader(Reader in)
- Параметры:
-
in— Reader
Подробное описание методов
read
public int read() throws IOException
- Переопределяет:
-
readв классеReader - Возвращает:
- Считанный символ в виде целого числа в диапазоне от 0 до 65535 (
0x00-0xffff) или -1, если достигнут конец потока - Исключения:
-
IOException— при возникновении ошибки ввода-вывода
read
public int read(char[] cbuf, int off, int len) throws IOException
Этот метод реализует общий контракт соответствующего метода read класса Reader. Для дополнительного удобства он пытается считать как можно больше символов, многократно вызывая метод read базового потока. Такое повторяющееся read продолжается до тех пор, пока не выполнится одно из следующих условий:
- Считано указанное количество символов,
- Метод
readбазового потока возвращает-1, указывая на конец файла, или - Метод
readyбазового потока возвращаетfalse, указывая, что дальнейшие запросы ввода будут заблокированы.
read базового потока возвращает -1, указывая на конец файла, этот метод возвращает -1. В противном случае метод возвращает фактическое количество считанных символов. Подклассам этого класса рекомендуется, но не обязательно, пытаться считывать как можно больше символов тем же способом.
Обычно этот метод считывает символы из буфера символов этого потока, заполняя его из базового потока по мере необходимости. Однако если буфер пуст, отметка недействительна, а запрошенная длина не меньше размера буфера, этот метод считывает символы непосредственно из базового потока в указанный массив. Таким образом, избыточные вызовы BufferedReader не приводят к ненужному копированию данных.
- Определен в:
-
readв классеReader - Параметры:
-
cbuf— буфер назначения -
off— смещение, с которого следует начать сохранение символов -
len— максимальное количество символов для чтения - Возвращает:
- Количество считанных символов или -1, если достигнут конец потока
- Исключения:
-
IndexOutOfBoundsException— еслиoffотрицательно, илиlenотрицательно, илиlenбольшеcbuf.length - off -
IOException— при возникновении ошибки ввода-вывода
readLine
public String readLine() throws IOException
- Возвращает:
- Строку, содержащую текст строки без символов завершения строки, или null, если достигнут конец потока и ни одного символа не было считано
- Исключения:
-
IOException— при возникновении ошибки ввода-вывода - См. также:
ready
public boolean ready() throws IOException
- Переопределяет:
-
readyв классеReader - Возвращает:
- true, если следующий вызов read() гарантированно не будет заблокирован в ожидании ввода; в противном случае false. Обратите внимание: возврат false не гарантирует, что следующий вызов read будет заблокирован.
- Исключения:
-
IOException— при возникновении ошибки ввода-вывода
markSupported
public boolean markSupported()
- Переопределяет:
-
markSupportedв классеReader - Возвращает:
- true тогда и только тогда, когда этот поток поддерживает операцию mark.
mark
public void mark(int readAheadLimit) throws IOException
- Переопределяет:
-
markв классеReader - Параметры:
-
readAheadLimit— предел количества символов, которые можно считать с сохранением отметки. Попытка сбросить поток после считывания этого количества символов или большего числа может завершиться неудачей. Если значение предела превышает размер буфера ввода, будет выделен новый буфер размером не меньше этого предела. Поэтому большие значения следует использовать с осторожностью. - Исключения:
-
IllegalArgumentException— еслиreadAheadLimit < 0 -
IOException— при возникновении ошибки ввода-вывода
reset
public void reset() throws IOException
- Переопределяет:
-
resetв классеReader - Исключения:
-
IOException— если отметка в потоке никогда не устанавливалась или стала недействительной
close
public void close() throws IOException
Reader- Определен в:
-
closeв интерфейсеAutoCloseable - Определен в:
-
closeв интерфейсеCloseable - Определен в:
-
closeв классеReader - Исключения:
-
IOException— при возникновении ошибки ввода-вывода
lines
public Stream<String> lines()
Stream, элементы которого — строки, прочитанные из этого BufferedReader. Stream заполняется лениво, то есть чтение происходит только во время терминальной операции потока. Во время выполнения терминальной операции потока нельзя выполнять операции с reader. В противном случае результат терминальной операции потока не определен.
После выполнения терминальной операции потока нет никаких гарантий, что reader будет находиться в определенной позиции, из которой можно считать следующий символ или строку.
Если при обращении к базовому BufferedReader возникает IOException, она оборачивается в UncheckedIOException, которая будет выброшена из метода Stream, вызвавшего чтение. Этот метод вернет Stream, если его вызвать для закрытого BufferedReader. Любая операция с этим потоком, требующая чтения из закрытого BufferedReader, приведет к выбросу UncheckedIOException.
- Возвращает:
Stream<String>, предоставляющий строки текста, описанные этимBufferedReader- С версии:
- 1.8
© 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/BufferedReader.html