- java.lang.Object
-
- java.io.Reader
-
- java.io.BufferedReader
-
- All Implemented Interfaces:
-
Closeable
,AutoCloseable
,Readable
- 已知直接子类:
-
LineNumberReader
public class BufferedReader extends Reader
从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。
通常,由读取器做出的每个读取请求将引起对底层字符或字节流的相应读取请求。 因此,建议将BufferedReader包装在其read()操作可能昂贵的读取器上,例如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)
-
-
构造方法摘要
构造方法 Constructor 描述 BufferedReader(Reader in)
创建使用默认大小的输入缓冲区的缓冲字符输入流。BufferedReader(Reader in, int sz)
创建使用指定大小的输入缓冲区的缓冲字符输入流。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
close()
关闭流并释放与之相关联的任何系统资源。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)
跳过字符
-
-
-
构造方法详细信息
-
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
- 如果发生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
- 结果
- 当且仅当此流支持标记操作时才为真。
-
mark
public void mark(int readAheadLimit) throws IOException
标记流中的当前位置。 对reset()的后续调用将尝试将流重新定位到此位置。- 重写:
-
mark
在Reader
- 参数
-
readAheadLimit
- 限制仍然保留标记时可能读取的字符数。 在读取字符到此限制或超出之后尝试重新设置流可能会失败。 大于输入缓冲区大小的限制值将导致新的缓冲区被分配,其大小不小于limit。 因此,应谨慎使用大量值。 - 异常
-
IllegalArgumentException
- 如果是readAheadLimit < 0
-
IOException
- 如果发生I / O错误
-
reset
public void reset() throws IOException
将流重置为最近的标记。- 重写:
-
reset
在Reader
- 异常
-
IOException
- 如果流未被标记,或者标记已被无效
-
close
public void close() throws IOException
描述从类复制:Reader
关闭流并释放与之相关联的任何系统资源。 一旦流已关闭,进一步的read(),ready(),mark(),reset()或skip()调用将抛出IOException。 关闭以前关闭的流无效。- Specified by:
-
close
在接口AutoCloseable
- Specified by:
-
close
在接口Closeable
- Specified by:
-
close
在Reader
- 异常
-
IOException
- 如果发生I / O错误
-
lines
public Stream<String> lines()
返回一个Stream
,其元素是从这个BufferedReader
读取的行。Stream
是懒惰的人群,即只读在terminal stream operation期间。在执行终端流操作期间,读取器不能被操作。 否则,终端流操作的结果未定义。
在执行终端流操作之后,不能保证读取器将处于从其读取下一个字符或行的特定位置。
如果在访问底层的
BufferedReader
时抛出一个IOException
,它将被包裹在一个UncheckedIOException
中 ,这将从引起读取的Stream
方法抛出。 如果在关闭的BufferedReader中调用该方法,则此方法将返回一个Stream。 该流的任何操作需要在关闭之后从BufferedReader读取,将导致抛出UncheckedIOException异常。- 结果
-
一个
Stream<String>
提供了这个BufferedReader
描述的文本行 - 从以下版本开始:
- 1.8
-
-