Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java while循环中的BufferedReader ready方法来确定EOF?_Java_Bufferedreader - Fatal编程技术网

Java while循环中的BufferedReader ready方法来确定EOF?

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),但似乎遇到了一个我无法找到的无限循环 我只是想知道它是否读取了整个文件,因

我有一个大文件(仅英文维基百科文章数据库为XML文件)。我正在使用
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) {
    ...
}