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