Frage

Was Input Typ verwendet, um Griff URLConnection Ströme werden soll, die HTTP haben Content-Encoding auf deflate

Für ein Content-Encoding von gzip oder zip Ich benutze ein GZIPInputStream, kein Problem.

Für eine Content-Encoding von "entleeren" Ich habe versucht, mit InflaterInputStream und DeflaterInputStream , aber ich erhalte

  

java.util.zip.ZipException: unbekannt   Kompressionsverfahren           bei java.util.zip.InflaterInputStream.read (InflaterInputStream.java:147)

Mein Verständnis ist, dass "entleeren" Codierung bezieht sich auf Zlib Kompression und nach der

War es hilfreich?

Lösung

In HTTP / 1.1, bezieht sich tatsächlich auf den Content-encoding: deflate DEFLATE Komprimierungsalgorithmus, wie definiert durch RFC 1951 im zlib Datenformat eingewickelt, wie definiert durch RFC 1950 .

Jedoch einige Anbieter implementieren nur den DEFLATE Algorithmus wie definiert RFC 1951 vollständig ignoriert RFC 1950 (keine zlib-Header).

Andere haben betroffen von der gleichen Ausgabe:

Um dies zu umgehen, versuchen Sie die InflaterInputStream Leiten eines Inflater zu instanziiert, die mit dem nowrap Parametersatz true erstellt wurde:

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

Andere Tipps

Leider ist die InflaterInputStream mit einem Inflater-Objekt nicht produzieren immer die korrekte Dekompression. Ich musste die Header erkennen und die Inflater sagen, wo die auf die Nutzlast Offset war.

http://thushw.blogspot.com/ 2014/05 / Decodierung-html-Seiten-mit-content.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top