JavaTM Platform
Standard Ed. 6

java.io
类 BufferedReader

java.lang.Object
  继承者 java.io.Reader
      继承者 java.io.BufferedReader
所有已实现的接口:
Closeable, Readable
直接已知子类:
LineNumberReader

public class BufferedReader
extends Reader

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,

 BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));
 
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。

通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。

从以下版本开始:
JDK1.1
另请参见:
FileReader, InputStreamReader

字段摘要
 
从类 java.io.Reader 继承的字段
lock
 
构造方法摘要
BufferedReader(Reader in)
          创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
          创建一个使用指定大小输入缓冲区的缓冲字符输入流。
 
方法摘要
 void close()
          关闭该流并释放与之关联的所有资源。
 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 继承的方法
read, read
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

BufferedReader

public BufferedReader(Reader in,
                      int sz)
创建一个使用指定大小输入缓冲区的缓冲字符输入流。

参数:
in - 一个 Reader
sz - 输入缓冲区的大小
抛出:
IllegalArgumentException - 如果 sz <= 0

BufferedReader

public BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。

参数:
in - 一个 Reader
方法详细信息

read

public int read()
         throws IOException
读取单个字符。

覆盖:
Reader 中的 read
返回:
作为一个整数(其范围从 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(指示文件末尾),则此方法返回 -1。否则此方法返回实际读取的字符数。

鼓励(但不是必须)此类的各个子类以相同的方式尝试读取尽可能多的字符。

一般来说,此方法从此流的字符缓冲区中获得字符,根据需要从底层流中填充缓冲区。但是,如果缓冲区为空、标记无效,并且所请求的长度至少与缓冲区相同,则此方法将直接从底层流中将字符读取到给定的数组中。因此多余的 BufferedReader 将不必复制数据。

指定者:
Reader 中的 read
参数:
cbuf - 目标缓冲区
off - 开始存储字符处的偏移量
len - 要读取的最大字符数
返回:
读取的字符数,如果已到达流末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误

readLine

public String readLine()
                throws IOException
读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。

返回:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
抛出:
IOException - 如果发生 I/O 错误

skip

public long skip(long n)
          throws IOException
跳过字符。

覆盖:
Reader 中的 skip
参数:
n - 要跳过的字符数
返回:
实际跳过的字符数
抛出:
IllegalArgumentException - 如果 n 为负。
IOException - 如果发生 I/O 错误

ready

public boolean ready()
              throws IOException
判断此流是否已准备好被读取。如果缓冲区不为空,或者底层字符流已准备就绪,则缓冲的字符流准备就绪。

覆盖:
Reader 中的 ready
返回:
如果保证下一个 read() 不阻塞输入,则返回 True,否则返回 false。注意,返回 false 并不保证阻塞下一次读取。
抛出:
IOException - 如果发生 I/O 错误

markSupported

public boolean markSupported()
判断此流是否支持 mark() 操作(它一定支持)。

覆盖:
Reader 中的 markSupported
返回:
当且仅当此流支持此 mark 操作时,返回 true。

mark

public void mark(int readAheadLimit)
          throws IOException
标记流中的当前位置。对 reset() 的后续调用将尝试将该流重新定位到此点。

覆盖:
Reader 中的 mark
参数:
readAheadLimit - 在仍保留该标记的情况下,对可读取字符数量的限制。在读取达到或超过此限制的字符后,尝试重置流可能会失败。限制值大于输入缓冲区的大小将导致分配一个新缓冲区,其大小不小于该限制值。因此应该小心使用较大的值。
抛出:
IllegalArgumentException - 如果 readAheadLimit < 0
IOException - 如果发生 I/O 错误

reset

public void reset()
           throws IOException
将流重置到最新的标记。

覆盖:
Reader 中的 reset
抛出:
IOException - 如果从未标记过该流,或者标记已失效。

close

public void close()
           throws IOException
从类 Reader 复制的描述
关闭该流并释放与之关联的所有资源。在关闭该流后,再调用 read()、ready()、mark()、reset() 或 skip() 将抛出 IOException。关闭以前关闭的流无效。

指定者:
接口 Closeable 中的 close
指定者:
Reader 中的 close
抛出:
IOException - 如果发生 I/O 错误

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策