質問

inputstream タイプは、httpを持つurlconnectionストリームを処理するために使用する必要があります コンテンツエンコード に設定 デフレート?

GZIPまたはZIPのコンテンツエンコードには、gzipinputStreamを使用していますが、問題ありません。

私が使用しようとした「デフレート」のコンテンツエンコードのために InflaterInputStreamdeflaterinputStream しかし、私は得ます

java.util.zip.zipexception:java.util.zip.inflaterinputStream.read(inflaterinputStream.java:147の不明な圧縮法:

私の理解では、「デフレート」エンコードは Zlib 圧縮、およびに従って ドキュメント これは、inflaterinputStreamによって処理する必要があります。

役に立ちましたか?

解決

HTTP/1.1で、 Content-encoding: deflate 実際には、によって定義されているように、デフレート圧縮アルゴリズムを指します RFC 1951, 、ZLIBデータ形式に包まれています。 RFC 1950.

ただし、一部のベンダーは、RFC 1950(ZLIBヘッダーなし)を完全に無視して、定義されたRFC 1951としてDEFLATEアルゴリズムを実装するだけです。

他の人は同じ問題に見舞われています:

これを回避するために、 InflaterInputStream 渡します Inflater それはで作成されました nowrap に設定されたパラメーター true:

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

他のヒント

残念ながら、インフル型のストリームをインフレーターオブジェクトで使用すると、必ずしも正しい減圧が生じるとは限りませんでした。ヘッダーを検出し、ペイロードのオフセットがどこにあるかをインフレーターに伝える必要がありました。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top