处理HTTP ContentEncoding“deflate”

时间:2010-10-14 10:13:57

标签: java http http-compression content-encoding

应该使用什么 InputStream 类型来处理将HTTP 内容编码设置为 deflate 的URLConnection流?

对于gzip或zip的内容编码我使用GZIPInputStream,没问题。

对于“deflate”的内容编码,我尝试使用 InflaterInputStream DeflaterInputStream ,但我得到了

  

java.util.zip.ZipException:未知   压缩方法           at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:147)

我的理解是“deflate”编码是指 Zlib 压缩,根据docs,这应该由InflaterInputStream处理。

2 个答案:

答案 0 :(得分:22)

在HTTP / 1.1中,Content-encoding: deflate实际上是指由RFC 1951定义的DEFLATE压缩算法,包含在zlib数据格式中,由RFC 1950定义。

然而,有些供应商只是实现了RFC 1951定义的DEFLATE算法,完全忽略了RFC 1950(没有zlib头文件)。

其他人也遇到过同样的问题:

要解决此问题,请尝试实例化InflaterInputStream传递Inflater,其中nowrap参数设置为true

in = new InflaterInputStream(conn.getInputStream()), new Inflater(true));

答案 1 :(得分:1)

不幸的是,将InflaterInputStream与Inflater对象一起使用并不总能产生正确的解压缩。我必须检测标题并告诉Inflater有效负载的偏移量是什么。

http://thushw.blogspot.com/2014/05/decoding-html-pages-with-content.html