Класс BufferedReader
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable,Readable
- Прямые известные подклассы:
LineNumberReader
public class BufferedReader extends Reader
Размер буфера может быть указан или может быть использован размер по умолчанию. По умолчанию он достаточно большой для большинства целей.
В общем случае каждый запрос на чтение, сделанный Reader, вызывает соответствующий запрос на чтение в базовом потоке символов или байтов. Поэтому рекомендуется обернуть BufferedReader вокруг любого Reader, чьи операции read() могут быть дорогостоящими, такие как FileReader и InputStreamReader. Например,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
будет буферизовать вход из указанного файла. Без буферизации каждый вызов read() или readLine() мог бы привести к чтению байтов из файла, преобразованию их в символы и возвращению, что может быть очень неэффективным. Программы, которые используют DataInputStream для текстового ввода, могут быть локализованы путем замены каждого DataInputStream соответствующим BufferedReader.
- С момента:
- 1.1
- См. также:
Краткое описание полей
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
BufferedReader |
Создает буферизованный поток символьного ввода, использующий буфер ввода по умолчанию. |
BufferedReader |
Создает буферизованный поток символьного ввода, использующий буфер ввода заданного размера. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Закрывает поток и освобождает все системные ресурсы, связанные с ним. |
Stream<String> |
lines() |
Возвращает Stream, элементы которого представляют собой строки, считанные из этого BufferedReader. |
void |
mark |
Помечает текущее положение в потоке. |
boolean |
markSupported() |
Указывает, поддерживает ли этот поток операцию mark(), которую он поддерживает. |
int |
read() |
Считывает один символ. |
int |
read |
Считывает символы в часть массива. |
String |
readLine() |
Считывает строку текста. |
boolean |
ready() |
Указывает, готов ли этот поток к чтению. |
void |
reset() |
Возвращает поток в последнее отмеченное положение. |
Методы, объявленные в классе java.io.Reader
nullReader, read, read, skip, transferTo
Подробное описание конструкторов
BufferedReader
public BufferedReader(Reader in, int sz)
- Параметры:
-
in- Поток ввода -
sz- Размер буфера ввода - Исключения:
-
IllegalArgumentException- Еслиsz <= 0
BufferedReader
public BufferedReader(Reader in)
- Параметры:
-
in- Поток ввода
Подробное описание методов
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, если следующее чтение гарантированно не заблокируется для ввода, false в противном случае. Обратите внимание, что возвращение false не гарантирует, что следующее чтение заблокируется.
- Исключения:
-
IOException- Если произошла ошибка ввода-вывода
markSupported
public boolean markSupported()
- Переопределяет:
-
markSupportedв классеReader - Возвращает:
- true тогда и только тогда, когда этот поток поддерживает операцию mark.
mark
public void mark(int readAheadLimit) throws IOException
- Переопределяет:
-
markв классеReader - Параметры:
-
readAheadLimit- Предел количества символов, которые могут быть прочитаны, сохраняя при этом метку. Попытка сбросить поток после чтения символов до этого предела или дальше может завершиться неудачей. Значение предела, большее размера буфера ввода, приведет к выделению нового буфера, размер которого не меньше limit. Поэтому следует с осторожностью использовать большие значения. - Исключения:
-
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 заполняется лениво, т.е. чтение происходит только во время терминальной операции потока Stream. Нельзя осуществлять операции над потоком ввода во время выполнения терминальной операции потока. В противном случае результат терминальной операции потока неопределён.
После выполнения терминальной операции потока нет гарантий, что поток ввода будет находиться в определённой позиции для чтения следующего символа или строки.
Если при доступе к базовому BufferedReader возникает исключение IOException, оно оборачивается в UncheckedIOException, которое будет сгенерировано методом Stream вызвавшим чтение. Этот метод вернёт поток, если вызван на закрытом BufferedReader. Любая операция над этим потоком, требующая чтения из BufferedReader после его закрытия, приведёт к генерации UncheckedIOException.
- Возвращает:
Stream<String>предоставляющий строки текста, описанные этимBufferedReader- С тех пор как:
- 1.8
© 1993, 2021, 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/17/docs/api/java.base/java/io/BufferedReader.html