处理HTTP ContentEncododing“ Deflate”
-
30-09-2019 - |
题
什么 Inputstream 类型应用于处理具有HTTP的URLConnection流 内容编码 设置 放气?
对于GZIP或ZIP的内容编码,我使用GZIPINPUTSTREAM,没问题。
对于“ Deflate”的内容编码,我尝试使用 Afteraterinputstream 和 DeflaterInputStream 但是我明白了
java.util.zip.zipexception:java.util.zip.inflaterinputstream.read(forteraterinputstream.java:147)的未知压缩方法
我的理解是,编码的“放气”是指 Zlib 压缩,并根据 文档 这应该由Afteraterinputstream来处理。
解决方案
在http/1.1中, Content-encoding: deflate
实际上是指下压缩算法,如 RFC 1951, ,以zlib数据格式包裹 RFC 1950.
但是,一些供应商只是将Deflate算法实现为定义的RFC 1951,完全忽略了RFC 1950(无ZLIB标头)。
其他人也受到同一问题的打击:
为了解决这个问题,请尝试实例化 InflaterInputStream
通过 Inflater
这是用 nowrap
参数设置为 true
:
in = new InflaterInputStream(conn.getInputStream()), new Inflater(true));
其他提示
不幸的是,将AlfterinputStream与Alterater对象一起使用并不总是会产生正确的减压。我必须检测到标题,并告诉膨胀者有效载荷的偏移量。
http://thushw.blogspot.com/2014/05/decoding-html-pages-with-content.html
不隶属于 StackOverflow