返回介绍

java.io 类 BufferedReader

发布于 2019-10-04 09:50:41 字数 8931 浏览 960 评论 0 收藏 0

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() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。

可以对使用 DataInputStream 进行按原文输入的程序进行本地化,方法是用合适的 BufferedReader 替换每个 DataInputStream。

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

字段摘要
从类 java.io.Reader 继承的字段
lock
构造方法摘要
BufferedReader(Readerin)

创建一个使用默认大小输入缓冲区的缓冲字符输入流。

BufferedReader(Readerin, intsz)

创建一个使用指定大小输入缓冲区的缓冲字符输入流。

方法摘要
voidclose()

关闭该流。

voidmark(intreadAheadLimit)

标记流中的当前位置。

booleanmarkSupported()

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

intread()

读取单个字符。

intread(char[]cbuf, intoff, intlen)

将字符读入数组的某一部分。

StringreadLine()

读取一个文本行。

booleanready()

判断此流是否已准备好被读取。

voidreset()

将流重置为最新的标记。

longskip(longn)

跳过字符。

从类 java.io.Reader 继承的方法
read, read
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

构造方法详细信息

BufferedReader

public BufferedReader(Readerin,
                      intsz)
创建一个使用指定大小输入缓冲区的缓冲字符输入流。
参数:
in - 一个 Reader
sz - 输入缓冲区的大小
抛出:
IllegalArgumentException - 如果 sz <= 0

BufferedReader

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

方法详细信息

read

public int read()
         throws IOException
读取单个字符。
覆盖:
Reader 中的 read
返回:
作为范围 0 到 65535 ( 0x00-0xffff ) 的整数读入的字符,如果已到达流末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误

read

public int read(char[]cbuf,
                intoff,
                intlen)
         throws IOException
将字符读入数组的某一部分。

此方法实现相应 Reader 类的 read 方法的常规协定。另一个便捷之处在于,它会尝试尽可能多的读取字符,方法是重复地调用基础流的 read 方法。这种迭代的 read 会一直继续下去,直到满足下列某个条件:

  • 已经读取了指定的字符数,
  • 基础流的 read 方法返回 -1 ,指示文件末尾(end-of-file),或者
  • 基础流的 ready 方法返回 false ,指示将阻塞进一步的输入请求。

如果在基础流上第一次调用 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(longn)
          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(intreadAheadLimit)
          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
关闭该流。
指定者:
接口 Closeable 中的 close
指定者:
Reader 中的 close
抛出:
IOException - 如果发生 I/O 错误

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文