BufferedReader在应该的时候没有说"准备好"

fgy*_*ica 8 java url bufferedreader

我试图通过URL上的InputStreamReader(到某些Apache服务器上的文件)使用BufferedReader从Web文档中读取文本.

String result = "";
URL url = new URL("http://someserver.domain/somefile");
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(url.openStream(), "iso-8859-1"));

result += in.readLine();
Run Code Online (Sandbox Code Playgroud)

现在这个工作得很好.但显然我希望读者不要只阅读一行,而是阅读文件中的一行.
查看BufferedReader API,以下代码应该这样做:

while (in.ready()) {
    result += in.readLine();
}
Run Code Online (Sandbox Code Playgroud)

即,当有更多行时读取所有行,当没有更多行时停止.但是这段代码不起作用 - 读者从不报告ready()= true!

我甚至可以在读取一行(从文件中读取正确的字符串)之前打印ready()值,但读者将报告" false ".

难道我做错了什么?为什么BufferedReader 会在准备就绪时返回' false '?

jos*_*efx 9

ready()!=有更多

ready()并不表示有更多数据需要读取.它仅显示读取是否可以阻止该线程.在您读取所有数据之前,它可能会返回false.

要确定是否没有更多数据检查是否readLine()返回null.

String line = in.readLine();
while(line != null){
   ...
   line = in.readLine();
}
Run Code Online (Sandbox Code Playgroud)


小智 6

另一种绕过它的方法in.ready()就是:

while ((nextLine = in.readLine()) != null) {
  result += nextLine;
}
Run Code Online (Sandbox Code Playgroud)

你将继续阅读,直到你完成.这样您就不必担心问题了in.ready().