public class BufferedReader extends Reader
可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。
通常,由读取器做出的每个读取请求将引起对底层字符或字节流的相应读取请求。 因此,建议将BufferedReader包装在其read()操作可能昂贵的读取器上,例如FileReaders和InputStreamReaders。 例如,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。
没有缓冲,每次调用read()或readLine()可能会导致从文件中读取字节,转换成字符,然后返回,这可能非常低效。
使用DataInputStreams进行文本输入的程序可以通过用适当的BufferedReader替换每个DataInputStream进行本地化。
FileReader
, InputStreamReader
, Files.newBufferedReader(java.nio.file.Path, java.nio.charset.Charset)
Constructor and Description |
---|
BufferedReader(Reader in)
创建使用默认大小的输入缓冲区的缓冲字符输入流。
|
BufferedReader(Reader in, int sz)
创建使用指定大小的输入缓冲区的缓冲字符输入流。
|
Modifier and Type | Method and Description |
---|---|
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)
跳过字符
|
public BufferedReader(Reader in, int sz)
in
- 阅读器
sz
- 输入缓冲区大小
IllegalArgumentException
- 如果
sz <= 0
public BufferedReader(Reader in)
in
- 读者
public int read() throws IOException
read
在
Reader
IOException
- 如果发生I / O错误
public int read(char[] cbuf, int off, int len) throws IOException
该方法执行
类的相应Reader
方法的一般合同。 作为一个额外的方便,它尝试通过重复调用基础流的read
read
方法来读取尽可能多的字符。 这个迭代read
继续,直到下列条件之一成立:
read
方法返回-1
,表示文件结尾,或 ready
方法返回false
,表示进一步的输入请求将阻塞。 read
返回-1
以指示文件结束,则此方法返回-1
。
否则,此方法返回实际读取的字符数。
鼓励这个类的子类,但不是必需的,尝试以相同的方式读取尽可能多的字符。
通常这种方法从这个流的字符缓冲区中获取字符,并根据需要从底层流中填充它。 但是,如果缓冲区为空,则该标记无效,并且所请求的长度至少与缓冲区一样大,则该方法将直接从基础流中读取字符到给定的数组中。 因此冗余BufferedReader
将不会不必要地复制数据。
read
在类别
Reader
cbuf
- 目的缓冲区
off
- 开始存储字符的偏移量
len
- 要读取的最大字符数
IOException
- 如果发生I / O错误
public String readLine() throws IOException
IOException
- 如果发生I / O错误
Files.readAllLines(java.nio.file.Path, java.nio.charset.Charset)
public long skip(long n) throws IOException
skip
在
Reader
n
- 要跳过的字符数
IllegalArgumentException
- 如果
n
为负数。
IOException
- 如果发生I / O错误
public boolean ready() throws IOException
ready
在类别
Reader
IOException
- 如果发生I / O错误
public boolean markSupported()
markSupported
在
Reader
public void mark(int readAheadLimit) throws IOException
mark
在
Reader
readAheadLimit
- 限制仍然保留标记时可能读取的字符数。
在读取字符到此限制或超出之后,尝试重新设置流可能会失败。
大于输入缓冲区大小的限制值将导致新的缓冲区被分配,其大小不小于limit。
因此,应谨慎使用大量值。
IllegalArgumentException
- 如果
readAheadLimit < 0
IOException
- 如果发生I / O错误
public void reset() throws IOException
reset
在
Reader
IOException
- 如果流未被标记,或者标记已被无效
public void close() throws IOException
Reader
复制
close
在界面
Closeable
close
在界面
AutoCloseable
close
在
Reader
IOException
- 如果发生I / O错误
public Stream<String> lines()
Stream
,其元素是从这个BufferedReader
读取的行。
Stream
是懒惰的人群,即只读在terminal stream operation期间。
在执行终端流操作期间,读取器不能被操作。 否则,终端流操作的结果未定义。
在执行终端流操作之后,不能保证读取器将处于从其读取下一个字符或行的特定位置。
如果在访问底层BufferedReader时抛出BufferedReader
,它将被包裹在UncheckedIOException
中 ,这将从导致读取的Stream
方法抛出。 如果在关闭的BufferedReader中调用该方法,则此方法将返回一个Stream。 该流的任何操作需要在关闭之后从BufferedReader读取,将导致抛出UncheckedIOException异常。
Stream<String>
提供了这个
BufferedReader
的文本行