java.lang.Object
java.io.Reader
java.io.BufferedReader
- 所有已实现的接口:
-
Closeable
,AutoCloseable
,Readable
- 直接已知的子类:
-
LineNumberReader
从字符输入流中读取文本,缓冲字符以提供对字符、数组和行的有效读取。
将缓冲来自指定文件的输入。如果没有缓冲,每次调用read()或readLine()都可能导致从文件中读取字节,转换为字符,然后返回,这可能非常低效。
可以指定缓冲区大小,也可以使用默认大小。默认大小对于大多数情况都足够大。
通常,对Reader发出的每个读取请求都会导致对底层字符流或字节流发出相应的读取请求。因此,建议在可能成本高昂的Reader周围包装一个BufferedReader,例如FileReaders和InputStreamReaders。例如,
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
使用DataInputStream进行文本输入的程序可以通过将每个DataInputStream替换为适当的BufferedReader来进行本地化。
- 自版本:
- 1.1
- 参见:
-
Field Summary
-
Constructor Summary
ConstructorDescriptionBufferedReader
(Reader in) 创建使用默认大小输入缓冲区的缓冲字符输入流。BufferedReader
(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。 -
Method Summary
Modifier and TypeMethodDescriptionvoid
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()
将流重置为最近的标记。Methods declared in class java.io.Reader
nullReader, read, read, skip, transferTo
-
Constructor Details
-
BufferedReader
创建使用指定大小的输入缓冲区的缓冲字符输入流。- 参数:
-
in
- 一个Reader -
sz
- 输入缓冲区大小 - 抛出:
-
IllegalArgumentException
- 如果sz <= 0
-
BufferedReader
创建使用默认大小输入缓冲区的缓冲字符输入流。- 参数:
-
in
- 一个Reader
-
-
Method Details
-
read
读取单个字符。- 覆盖:
-
read
在类中Reader
- 返回:
-
读取的字符,作为范围为0到65535(
0x00-0xffff
)的整数,如果已到达流的末尾,则为-1 - 抛出:
-
IOException
- 如果发生I/O错误
-
read
将字符读入数组的一部分。此方法实现了
Reader
类的相应方法的一般约定。作为额外的便利,它通过重复调用底层流的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)中的任何一个终止的。- 返回:
- 包含行内容(不包括任何行终止字符)的字符串,如果已到达流的末尾而没有读取任何字符,则为null
- 抛出:
-
IOException
- 如果发生I/O错误 - 参见:
-
ready
告知此流是否准备好进行读取。如果缓冲字符流不为空,或者底层字符流准备好,则准备就绪。- 覆盖:
-
ready
在类中Reader
- 返回:
- 如果下一个read()保证不会为输入而阻塞,则为true,否则为false。请注意,返回false并不保证下一个读取将阻塞。
- 抛出:
-
IOException
- 如果发生I/O错误
-
markSupported
public boolean markSupported()告知此流是否支持mark()操作,它支持。- 覆盖:
-
markSupported
在类中Reader
- 返回:
- 如果此流支持标记操作,则为true。
-
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。- 返回:
-
提供由这个
BufferedReader
描述的文本行的Stream<String>
- 自版本:
- 1.8
-