【发布时间】:2014-04-09 03:36:46
【问题描述】:
Java 文档说Java Docs
公共类 BufferedReader 扩展阅读器
从字符输入流中读取文本,缓冲字符以提供>高效读取字符、数组和行。
可以指定缓冲区大小,也可以使用默认大小。默认值>对于大多数用途来说足够了。
通常,由 Reader 发出的每个读取请求都会导致相应的读取请求由底层字符或字节流组成。因此,建议将 >BufferedReader 包裹在任何其 read() 操作可能成本高昂的 Reader 周围,例如 >FileReaders 和 InputStreamReaders。例如,
BufferedReader 中 = new BufferedReader(new FileReader("foo.in"));
将缓冲来自指定文件的输入。如果没有缓冲,每次调用 >read() 或 readLine() 都可能导致从文件中读取字节,转换为 >characters,然后返回,这可能非常低效。
但是通过挂钩 Filereader,我们使用 FileReader 的 read 方法来读取一次读取一个字符的文件,所以如果我的文件包含 2000 个字符,FileReader 首先将一次读取 2000 个字符并将其传输到缓冲区,我们将读取从缓冲区使用 bufferedreader 那么它如何提高性能。我们只能使用 FileReader 来做到这一点?
【问题讨论】:
-
您必须一次“阅读”一个字符。
FileReader将一个或多个字节的序列变成可行的字符;根据所使用的编码,一个字符可能被编码为几个字节。特别是在 UTF-8 的情况下,这可以少至 1 个字节或多至 3 个字节。BufferedReader只是通过缓冲解码操作的结果来减少从原始文件读取所需的次数。 -
@fge 所以你说在这种情况下 Filereader 将一次读取所有字符。
-
不,只有块;想象一个文件有几个 GiB 大......
-
@fge 它如何读取大块它没有 readline() 方法去下一行
-
BufferedReader将控制它;或者,事实上,任何Reader。查看Reader的javadoc:它具有用字符填充char[]的方法。
标签: java bufferedreader filereader