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

时间:2011-07-21 15:25:11

标签: java http zlib

我试图寻找类似的问题,但找不到任何类似我的问题的解决方案:

我使用以下代码从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输入流的意外结束

当我可以的时候,我会抓住这个异常并重试该操作 - 成功。

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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