使用 BufferedReader 的 Java 中的过早 EOF 异常

Premature EOF exception in Java using BufferedReader

提问人:Void 提问时间:12/19/2019 最后编辑:Void 更新时间:12/19/2019 访问量:952

问:

我正在尝试将 url(它只是文本)转换为字符串,并且我正在使用 BufferedReader 读取 url。但是,我不断收到过早的 EOF 异常。这是我到目前为止所拥有的。

 try {
        URL sUrl = new URL(url);
        String result = "";
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(sUrl.openStream()));
            String av;
            while ((av = br.readLine()) != null) {
                result += av;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println(result.length());
    } catch (Exception e) {
        e.printStackTrace();
    }

此外,我尝试实现此解决方案,我在另一个 stackoverflow 线程上看到了该解决方案。

try {
        URL oracle = new URL(url);
        BufferedReader in = new BufferedReader(
                new InputStreamReader(oracle.openStream()));

        StringBuffer input = new StringBuffer();
        int BUFFER_SIZE = 2000000;
        char[] buffer = new char[BUFFER_SIZE];
        int charsRead = 0;
        while ((charsRead = in.read(buffer, 0, BUFFER_SIZE)) != -1) {
            input.append(buffer, 0, charsRead);
        }
        in.close();
        System.out.println(input.toString().length());

    } catch (Exception e) {
        e.printStackTrace();
    }

这两种方法都会导致在我代码的 .read / .readLine 部分发生相同的错误。

这是堆栈跟踪。

java.io.IOException: Premature EOF
at java.base/sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:257)
at java.base/sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:689)
at java.base/java.io.FilterInputStream.read(FilterInputStream.java:133)
at java.base/sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3501)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:185)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392)
at com.github.doomsdayrs.jikan4java.ExampleClass.main(ExampleClass.java:99)
Java URL BufferedReader EOF IO异常

评论

1赞 Joachim Sauer 12/19/2019
错误是什么?
0赞 Void 12/19/2019
java.io.IOException:过早的 EOF
0赞 Boris 12/19/2019
为什么不使用 NIO.2,例如,捕获网页并使用 Files.copy(in, path) 将其保存到文件中?
0赞 Void 12/20/2019
我认为如果我为每个唯一的新 url 制作一个新文件,它可能会造成很多混乱。我但我确实尝试将 url 转换为文件,然后从文件中读取,这奏效了。有没有一种好方法可以在文件以有效的方式生成文件后不久删除它们,我还没有研究过它,而且对这样的东西很陌生。
0赞 TheCoolDrop 12/20/2019
您能否确认异常是否发生在您要阅读的内容的末尾,或者它只是在中间的某个地方随机弹出?如果它总是出现在内容的末尾,则可能意味着那里存在 Java 错误,或者该 concent 格式不正确。您可以尝试将 read 或 readLine 调用包装在 try/catch 块中,并捕获 IOException 作为文件结束的信号

答: 暂无答案