【问题标题】:java.io.EOFException: Unexpected end of ZLIB input stream - reading from HTTPjava.io.EOFException:ZLIB 输入流的意外结束 - 从 HTTP 读取
【发布时间】:2011-07-22 01:34:03
【问题描述】:

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

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

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

问题是我不知道是什么导致这个异常弹出。 它的发生非常随机。

我想相信这是网络问题。

有人找到完全解决此类问题的方法吗?

谢谢!!

【问题讨论】:

    标签: java http zlib


    【解决方案1】:

    您使用的方法对于 GZip 等二进制格式不太理想,我假设您这样做只是为了测试?除了这个和 HTTPURLConnection 的错误之外,代码中没有太多其他可能导致问题的地方。我建议使用字节缓冲区交换阅读,至少可以消除它作为可能的错误来源。

    【讨论】:

    • 感谢您的回复。我使用此代码来阅读 html 页面 - 文本页面。大多数没有压缩。你对 HttpUrlConnection 的错误是什么意思?再次感谢。
    • @tzafrir - 您正在声明一个空变量 con 并将其传递给您的函数,并在其中对其进行初始化。如果您打算使用该 con 对象,请注意当控制从您的函数返回时它不会被初始化,因为 Java 是按值传递的。但是,如果您不打算使用它,则无需首先将其传递给函数。
    • 解决方法是捕获此特定异常并重试请求。我认为这是由网络问题引起的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多