BufferedReader就绪方法在while循环中确定EOF?

时间:2010-12-28 04:49:24

标签: java bufferedreader

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

file = BufferedReader...

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

这实际上有效吗?或者ready只有在等待硬盘返回数据时才会返回false,而实际上只有EOF到达时才会返回if (file.read() == -1)?我试图使用{{1}},但似乎遇到了一个我无法找到的无限循环。

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

2 个答案:

答案 0 :(得分:9)

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

检测到您已达到EOF的正确方法是检查read来电的结果。

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

int character;
while ((character = file.read()) != -1) {
    ...
}

答案 1 :(得分:2)

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