Java while循环中的BufferedReader ready方法来确定EOF?
我有一个大文件(仅英文维基百科文章数据库为XML文件)。我正在使用Java while循环中的BufferedReader ready方法来确定EOF?,java,bufferedreader,Java,Bufferedreader,我有一个大文件(仅英文维基百科文章数据库为XML文件)。我正在使用BufferedReader一次读取一个字符。伪代码是: file = BufferedReader... while (file.ready()) character = file.read() 这真的有效吗?或者,ready在等待HDD返回数据时只返回false,而不是在实际达到EOF时返回?我试图使用if(file.read()==-1),但似乎遇到了一个我无法找到的无限循环 我只是想知道它是否读取了整个文件,因
BufferedReader
一次读取一个字符。伪代码是:
file = BufferedReader...
while (file.ready())
character = file.read()
这真的有效吗?或者,ready
在等待HDD返回数据时只返回false
,而不是在实际达到EOF
时返回?我试图使用if(file.read()==-1)
,但似乎遇到了一个我无法找到的无限循环
我只是想知道它是否读取了整个文件,因为我的统计数据显示,已经读取了444380个维基百科页面,但我认为还有更多的文章。这不能保证读取整个输入
ready()
只是告诉您底层流是否准备好了某些内容。例如,如果它是通过网络套接字或文件进行抽象,则可能意味着还没有任何可用的缓冲数据。不打算使用Reader.ready()
方法测试文件结尾。相反,它是一种测试调用read()
是否会阻塞的方法
检测您是否已达到EOF的正确方法是检查read
调用的结果
例如,如果您一次读取一个字符,则read()
方法返回一个int
,如果您已到达文件末尾,该值将是有效字符或-1
。因此,您的代码应该如下所示:
int character;
while ((character = file.read()) != -1) {
...
}