- 所有已实现的接口:
Closeable
,AutoCloseable
,Readable
- 已知子类:
LineNumberReader
可以指定缓冲区大小,也可以使用默认大小。对于大多数用途,默认值足够大。
通常,对 Reader 发出的每个读取请求都会导致对底层字符或字节流发出相应的读取请求。因此,建议将 BufferedReader 包装在其 read() 操作可能代价高昂的任何 Reader 周围,例如 FileReaders 和 InputStreamReaders。例如,
BufferedReader in = new BufferedReader(new FileReader("foo.in"));将缓冲来自指定文件的输入。如果没有缓冲,每次调用 read() 或 readLine() 都可能导致从文件中读取字节,将其转换为字符,然后返回,这可能非常低效。
使用 DataInputStreams 进行文本输入的程序可以通过用适当的 BufferedReader 替换每个 DataInputStream 来本地化。
- 自从:
- 1.1
- 参见:
-
字段摘要
-
构造方法总结
构造方法构造方法描述BufferedReader
(Reader in) 创建使用默认大小输入缓冲区的缓冲字符输入流。BufferedReader
(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。 -
方法总结
修饰符和类型方法描述void
close()
关闭流并释放与其关联的任何系统资源。lines()
返回一个Stream
,其元素是从此BufferedReader
读取的行。void
mark
(int readAheadLimit) 标记流中的当前位置。boolean
告知此流是否支持 mark() 操作,它支持。int
read()
读取单个字符。int
read
(char[] cbuf, int off, int len) 将字符读入数组的一部分。readLine()
读取一行文本。boolean
ready()
告知此流是否已准备好读取。void
reset()
将流重置为最近的标记。在类 java.io.Reader 中声明的方法
nullReader, read, read, skip, transferTo
-
构造方法详细信息
-
BufferedReader
创建使用指定大小的输入缓冲区的缓冲字符输入流。- 参数:
in
- 读者sz
- 输入缓冲区大小- 抛出:
IllegalArgumentException
- 如果sz <= 0
-
BufferedReader
创建使用默认大小输入缓冲区的缓冲字符输入流。- 参数:
in
- 读者
-
-
方法详情
-
read
读取单个字符。- 重写:
read
在类Reader
中- 返回:
-
读取的字符,作为 0 到 65535 (
0x00-0xffff
) 范围内的整数,如果已到达流的末尾,则为 -1 - 抛出:
IOException
- 如果发生 I/O 错误
-
read
将字符读入数组的一部分。该方法实现了
Reader
类对应的read
方法的通用契约。作为额外的便利,它会尝试通过重复调用底层流的read
方法来读取尽可能多的字符。这种迭代read
一直持续到以下条件之一变为真:- 已读取指定数量的字符,
- 底层流的
read
方法返回-1
,表示文件结束,或者 - 底层流的
ready
方法返回false
,表示进一步的输入请求将被阻塞。
read
返回-1
以指示文件结束,则此方法返回-1
。否则此方法返回实际读取的字符数。鼓励但不要求此类的子类尝试以相同的方式读取尽可能多的字符。
通常,此方法从该流的字符缓冲区中获取字符,并根据需要从底层流中填充它。但是,如果缓冲区为空,标记无效,并且请求的长度至少与缓冲区一样大,则此方法将直接从底层流中读取字符到给定数组中。因此冗余的
BufferedReader
不会不必要地复制数据。- 指定者:
read
在类Reader
中- 参数:
cbuf
- 目标缓冲区off
- 开始存储字符的偏移量len
- 要读取的最大字符数- 返回:
- 读取的字符数,如果已到达流末尾则为 -1
- 抛出:
IndexOutOfBoundsException
- 如果off
为负,或len
为负,或len
大于cbuf.length - off
IOException
- 如果发生 I/O 错误
-
readLine
读取一行文本。一行被认为是由换行符 ('\n')、回车符 ('\r')、紧跟换行符的回车符或到达文件末尾中的任何一个终止的(EOF)。- 返回:
- 包含行内容的 String,不包括任何行终止字符,如果在未读取任何字符的情况下已到达流末尾,则为 null
- 抛出:
IOException
- 如果发生 I/O 错误- 参见:
-
ready
告知此流是否已准备好读取。如果缓冲区不为空,或者如果底层字符流准备就绪,则缓冲字符流准备就绪。- 重写:
ready
在类Reader
中- 返回:
- 如果保证下一个 read() 不会阻塞输入,则为 True,否则为 false。请注意,返回 false 并不能保证下一次读取会阻塞。
- 抛出:
IOException
- 如果发生 I/O 错误
-
markSupported
public boolean markSupported()告知此流是否支持 mark() 操作,它支持。- 重写:
markSupported
在类Reader
中- 返回:
- 当且仅当此流支持标记操作时才为真。
-
mark
标记流中的当前位置。对 reset() 的后续调用将尝试将流重新定位到这一点。- 重写:
mark
在类Reader
中- 参数:
readAheadLimit
- 限制在仍保留标记的情况下可以读取的字符数。在读取达到或超过此限制的字符后尝试重置流可能会失败。大于输入缓冲区大小的限制值将导致分配一个大小不小于限制的新缓冲区。因此,应谨慎使用大值。- 抛出:
IllegalArgumentException
- 如果readAheadLimit < 0
IOException
- 如果发生 I/O 错误
-
reset
将流重置为最近的标记。- 重写:
reset
在类Reader
中- 抛出:
IOException
- 如果流从未被标记过,或者标记已经失效
-
close
从类复制的描述:Reader
关闭流并释放与其关联的任何系统资源。流关闭后,进一步的 read()、ready()、mark()、reset() 或 skip() 调用将抛出 IOException。关闭之前关闭的流没有任何效果。- 指定者:
close
在接口AutoCloseable
中- 指定者:
close
在接口Closeable
中- 指定者:
close
在类Reader
中- 抛出:
IOException
- 如果发生 I/O 错误
-
lines
返回一个Stream
,其元素是从此BufferedReader
读取的行。Stream
是延迟填充的,即只读发生在 终端流操作 期间。在执行终端流操作期间,不得对阅读器进行操作。否则,终端流操作的结果是未定义的。
执行终端流操作后,无法保证读取器位于特定位置以读取下一个字符或行。
如果在访问底层
BufferedReader
时抛出IOException
,它会被包裹在UncheckedIOException
中,后者将从导致读取发生的Stream
方法中抛出。如果在关闭的 BufferedReader 上调用此方法,将返回一个 Stream。在该流关闭后需要从 BufferedReader 读取的任何操作都将导致抛出 UncheckedIOException。- 返回:
-
a
Stream<String>
提供此BufferedReader
描述的文本行 - 自从:
- 1.8
-