2010-10-14 21 views
11

Lo InputStream tipo se debe utilizar para manejar corrientes URLConnection que han HTTP ContentEncoding conjunto de desinflar?Manejo HTTP ContentEncoding "desinflar"

Para una codificación de contenido de gzip o zip, uso un GZIPInputStream, no hay problema.

un contenido-Encoding de "desinflan" He intentado usar InflaterInputStream y DeflaterInputStream pero me da

java.util.zip.ZipException: desconocido método de compresión en java.util .zip.InflaterInputStream.read (InflaterInputStream.java:147)

Mi entendimiento es que "desinflar" encoding refiere a Zlib compresión, y de acuerdo con docs esto debe ser manejado por InflaterInputStream.

Respuesta

22

En HTTP/1.1, Content-encoding: deflate en realidad se refiere al algoritmo de compresión deflate, como se define por RFC 1951, envuelto en el formato de datos zlib, como se define por RFC 1950.

Sin embargo, algunos proveedores simplemente implementan el algoritmo DEFLATE como se define RFC 1951, ignorando por completo RFC 1950 (sin encabezados zlib).

Otros han visto afectados por el mismo problema:

Con el fin de evitar esto, trate de crear una instancia del InflaterInputStream pasar una Inflater que se creó con el nowrap parámetro establecido en true:

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

Ambos RFC parecen hacer referencia a Zlib, pero supongo diferentes versiones? . – Joel

+0

"6.2.2.2 Deflate Codificación El "desinflar" formato se define como la "desinflar" mecanismo de compresión (se describe en [RFC1951]) que se utiliza dentro de la "formato de datos zlib"([RFC1950]) Nota: Algunos incorrecto las implementaciones envían los datos comprimidos "desinflar" sin el contenedor zlib ". - http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p1-messaging-11.html#rfc.section.6.2.2.2 –

+0

¡Tu sugerencia para aprobar el Inflater funcionó! Gracias. – Joel