5

我有一个大文件(英文维基百科文章只有数据库作为 XML 文件)。我使用 . 一次读取一个字符BufferedReader。伪代码是:

file = BufferedReader...

while (file.ready())
    character = file.read()

这真的有效吗?还是在等待 HDDready返回false数据时才返回,而不是在实际EOF到达时返回?我尝试使用if (file.read() == -1),但似乎遇到了我根本找不到的无限循环。

我只是想知道它是否正在阅读整个文件,因为我的统计数据显示已经阅读了 444,380 个 Wikipedia 页面,但我认为还有更多文章。

4

2 回答 2

10

Reader.ready()方法不打算用于测试文件结束。相反,它是一种测试调用是否read()会阻塞的方法。

检测是否达到 EOF 的正确方法是检查read调用结果。

例如,如果您一次读取一个字符,该read()方法将返回int一个有效字符,或者-1如果您已到达文件末尾。因此,您的代码应如下所示:

int character;
while ((character = file.read()) != -1) {
    ...
}
于 2010-12-28T06:46:13.890 回答
2

这不能保证读取整个输入。 ready()只是告诉你底层流是否准备好了一些内容。例如,如果它通过网络套接字或文件进行抽象,则可能意味着还没有任何可用的缓冲数据

于 2010-12-28T04:59:42.343 回答