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 についてどこかで読んだことがありますが、データが処理されるよりも遅くなっていることを指摘したいと思います。メモリと処理能力が少ない仮想Windows XPでEclipseを実行すると、10のうち6程度が完了しますが、それでもエラーが発生します。

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)

スローを削除し、try catch を使用して、完全な最後のループまたは不完全な次のファイルに進みます (ソース コードを取得します。180kb または 9kb の可能性があります)。whileループを試行するとエラー2を吐き出すと言ったので、whileの問題だと言えます...

4

1 に答える 1