Класс BufferedReader
- java.lang.Object
-
- java.io.Reader
-
- java.io.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
- См. также:
-
FileReader,InputStreamReader,Files.newBufferedReader(java.nio.file.Path, java.nio.charset.Charset)
Поля
Поля, объявленные в классе java.io.Reader
lock Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
BufferedReader(Reader in) | Создаёт буферизованный поток символьного ввода, использующий буфер ввода стандартного размера. |
BufferedReader(Reader in,
int sz) | Создаёт буферизованный поток символьного ввода, использующий буфер ввода заданного размера. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Stream<String> | lines() | Возвращает |
void | mark(int readAheadLimit) | Помечает текущую позицию в потоке. |
boolean | markSupported() | Определяет, поддерживает ли этот поток операцию mark(), что он делает. |
int | read() | Читает один символ. |
int | read(char[] cbuf,
int off,
int len) | Читает символы в часть массива. |
String | readLine() | Читает строку текста. |
boolean | ready() | Определяет, готов ли этот поток к чтению. |
void | reset() | Возвращает поток к последней помеченной позиции. |
long | skip(long n) | Пропускает символы. |
Методы, объявленные в классе java.io.Reader
close, nullReader, read, read, transferTo Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
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. В качестве дополнительного удобства он пытается прочитать как можно больше символов, многократно вызывая метод Readerread базового потока. Это итеративное чтение read продолжается, пока не выполнится одно из следующих условий:
- Прочитано указанное количество символов,
- Метод
readбазового потока возвращает-1, указывая конец файла, - Метод
readyбазового потока возвращаетfalse, указывая, что дальнейшие запросы ввода заблокируют поток.
read в базовом потоке возвращает -1 для обозначения конца файла, то этот метод возвращает -1. В противном случае этот метод возвращает количество фактически прочитанных символов. Подклассы этого класса рекомендуются, но не обязаны, пытаться прочитать как можно больше символов таким же образом.
Обычно этот метод берёт символы из буфера символов этого потока, заполняя его из базового потока по мере необходимости. Однако, если буфер пуст, метка недействительна, и требуемая длина не меньше размера буфера, этот метод будет читать символы непосредственно из базового потока в заданный массив. Таким образом, избыточные BufferedReader не будут копировать данные излишне.
- Определено в:
-
readв классеReader - Параметры:
-
cbuf- Буфер назначения -
off- Смещение для начала записи символов -
len- Максимальное количество символов для чтения - Возвращает:
- Количество прочитанных символов или -1, если достигнут конец потока
- Исключения:
-
IOException- Если произошла ошибка ввода-вывода -
IndexOutOfBoundsException- Если произошла ошибка ввода-вывода
readLine
public String readLine()
throws IOException Читает строку текста. Строка считается завершённой любым из символов перевода строки ('\n'), символом возврата каретки ('\r'), символом возврата каретки, за которым сразу следует символ перевода строки, или по достижении конца файла (EOF).
- Возвращает:
- Строка, содержащая содержимое строки, не включая символы завершения строки, или null, если достигнут конец потока без чтения каких-либо символов
- Исключения:
-
IOException- Если произошла ошибка ввода-вывода - См. также:
Files.readAllLines(java.nio.file.Path, java.nio.charset.Charset)
skip
public long skip(long n)
throws IOException Пропускает символы.
- Переопределяет:
-
skipв классеReader - Параметры:
-
n- Количество символов для пропуска - Возвращает:
- Количество фактически пропущенных символов
- Исключения:
-
IllegalArgumentException- Еслиnотрицательно. -
IOException- Если произошла ошибка ввода-вывода
ready
public boolean ready()
throws IOException Определяет, готов ли этот поток для чтения. Буферизованный поток символов готов, если буфер не пуст или если базовый поток символов готов.
- Переопределяет:
-
readyв классеReader - Возвращает:
- True, если следующее чтение (read()) гарантированно не заблокируется для ввода, false в противном случае. Примечание: возвращение false не гарантирует, что следующее чтение заблокируется.
- Исключения:
-
IOException- Если произошла ошибка ввода-вывода
markSupported
public boolean markSupported()
Указывает, поддерживает ли этот поток операцию mark(), что он делает.
- Переопределяет:
-
markSupportedв классеReader - Возвращает:
- true, если и только если этот поток поддерживает операцию mark.
mark
public void mark(int readAheadLimit)
throws IOException Помечает текущую позицию в потоке. Последующие вызовы reset() будут пытаться переместить поток в эту точку.
- Переопределяет:
-
markв классеReader - Параметры:
-
readAheadLimit- Ограничение на количество символов, которые могут быть прочитаны, сохраняя при этом метку. Попытка сбросить поток после чтения символов до или сверх этого ограничения может не удаться. Значение ограничения, большее, чем размер буфера ввода, приведет к выделению нового буфера, размер которого не меньше limit. Поэтому следует использовать с осторожностью большие значения. - Исключения:
-
IllegalArgumentException- ЕслиreadAheadLimit < 0 -
IOException- Если произошла ошибка ввода-вывода
reset
public void reset()
throws IOException Сбрасывает поток до последней метки.
- Переопределяет:
-
resetв классеReader - Исключения:
-
IOException- Если поток никогда не помечался или метка была аннулирована
lines
public Stream<String> lines()
Возвращает Stream, элементы которого — строки, считанные из этого BufferedReader. Поток Stream заполняется лениво, т. е. чтение происходит только во время терминальной операции потока терминальной операции потока.
Поток не должен использоваться во время выполнения терминальной операции потока. В противном случае результат терминальной операции потока не определен.
После выполнения терминальной операции потока нет гарантии, что поток будет находиться в определённой позиции для чтения следующего символа или строки.
Если при обращении к базовому BufferedReader возникает исключение IOException, оно упаковывается в UncheckedIOException, который будет сгенерирован методом Stream вызвавшим чтение. Этот метод вернёт поток, если будет вызван на закрытом BufferedReader. Любая операция с этим потоком, требующая чтения из закрытого BufferedReader, вызовет исключение UncheckedIOException.
- Возвращает:
- поток
Stream<String>содержащий строки текста, описанные этимBufferedReader - С тех пор:
- 1.8
© 1993, 2020, 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/11/docs/api/java.base/java/io/BufferedReader.html