处理HTTP ContentEncoding“deflate”

应该使用什么InputStream类型来处理将HTTP Content-Encoding设置为deflate的 URLConnection流?

对于gzip或zip的Content-Encoding,我使用GZIPInputStream,没问题。

对于“deflate”的Content-Encoding,我尝试过使用InflaterInputStreamDeflaterInputStream,但是我得到了

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

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

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

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

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

为了解决这个问题,尝试实例化InflaterInputStream传递一个使用nowrap参数设置为true创建的nowrap

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

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

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

Interesting Posts