1

我有这段代码,我用它来阅读网页的源代码。这段代码在循环中,它运行了很多次。然而,大多数时候它并没有完成它。例如,如果输出文件应该是 180kb 文本文件,我有 180,这意味着它是完整的,我还得到各种大小,如 9kb、150kb、170kb、50kb 等......我的意思是每 10 个循环它给我一个完整的页面 10 次中的 3 次和大约 7 次不完整的源文件。

URL site = null;
site = new URL("http://www.someurl/page/"+ i);
URLConnection yc = null;
yc = site.openConnection();

BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(yc.getInputStream()));

String inputLine;
System.out.println("Page Starts : " + i  );

    while ((inputLine = in.readLine()) != null) {

        System.out.println(inputLine);

    }

    in.close();

我在某处读过有关过早 EOF 的数据,该数据的处理速度比正在处理的数据要慢,我想指出我的连接速度很慢,我在 win7-64 上运行了相同的代码,它给了我 10 分中的 3 分。我在虚拟 Windows XP 中运行 Eclipse,内存和处理能力更少,它让我在十分之六的情况下做得更好,但仍然给我错误。

我使用了 throws IOException,它给了我这个错误并停止了代码:

Exception in thread "main" java.io.IOException: Premature EOF
    at sun.net.www.http.ChunkedInputStream.readAheadBlocking(Unknown Source)
    at sun.net.www.http.ChunkedInputStream.readAhead(Unknown Source)
    at sun.net.www.http.ChunkedInputStream.read(Unknown Source)
    at java.io.FilterInputStream.read(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
    at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
    at sun.nio.cs.StreamDecoder.read(Unknown Source)
    at java.io.InputStreamReader.read(Unknown Source)
    at java.io.BufferedReader.fill(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at SourceCodeExtractor.main(SourceCodeExtractor.java:34)

我已经删除了 throws 并使用 try catch 它继续使用完整的最后一个循环或不完整的下一个文件(我得到了我的源代码,它可能是 180kb 或 9kb)。我说过在尝试 while 循环时吐出错误 2,它确实如此,所以我可以说这是 while 的问题......

4

1 回答 1

0

我想你会发现如果你去掉这条线,你的代码会更快:

System.out.println(inputLine);
于 2013-07-20T14:15:55.103 回答