java.io.EOFException:ZLIB输入流意外结束-从HTTP读取

java.io.EOFException:ZLIB输入流意外结束-从HTTP读取,java,http,zlib,Java,Http,Zlib,我试着四处寻找类似的问题,但找不到与我的问题类似的解决方案: 我使用以下代码读取HttpUrlConnection: public static BufferedReader getConnectionReader(HttpURLConnection con, String url) throws Exception { con = (HttpURLConnection) new URL(url).openConnection(); con.connect();

我试着四处寻找类似的问题,但找不到与我的问题类似的解决方案:

我使用以下代码读取HttpUrlConnection:

public static BufferedReader getConnectionReader(HttpURLConnection con, String url)
        throws Exception {
    con = (HttpURLConnection) new URL(url).openConnection();
    con.connect();
    if (cm != null) {
        cm.storeCookies(con);
    }
    if (con.getHeaderField("Content-Encoding") != null
            && con.getHeaderField("Content-Encoding").equalsIgnoreCase("gzip")) {
        return new BufferedReader(new InputStreamReader(new GZIPInputStream(con.getInputStream())));
    } else
        return new BufferedReader(new InputStreamReader(con.getInputStream()));
}
通过以下方式执行读取:

HttpURLConnection con = null;
reader = Utils.getConnectionReader(con, "http://www.site.com/page.html");
String line = null;
while ((line = reader.readLine()) != null) {
    log.info(line);
}
有时我会遇到提到的例外情况:

java.io.EOFException:ZLIB输入流意外结束

如果可以,我会捕获此异常并重试该操作-成功

问题是,我不知道是什么原因导致此异常弹出。 这是随机发生的

我想相信这是一个网络问题

有人找到了完全解决这个问题的方法吗


谢谢

您使用的方法对于像GZip这样的二进制格式不太理想,我想您这样做只是为了测试?除此之外,还有HTTPURLConnection的bug,代码中没有太多其他可能导致此问题的代码。我建议使用字节缓冲区交换进行读取,至少可以消除这一可能的错误源。

感谢您的回复。我使用这段代码来阅读html页面-文本页面。大多数都不是压缩的。关于HttpUrlConnection的bug,你是什么意思?再次感谢。@tzafrir-您正在声明一个空变量con并将其传递到函数中,然后在函数中初始化它。如果您打算使用这个con对象,那么请注意,当控件从函数中返回时,它不会被初始化,因为Java是按值传递的。但是,如果您不打算使用它,那么首先就不需要将其传递到函数中。解决方法是捕获此特定异常并重试请求。我想这是由网络问题引起的。