Domanda

Cosa InputStream tipo dovrebbe essere utilizzato per i flussi URLConnection maniglia che hanno HTTP Content-Encoding insieme a deflate

Per un Content-Encoding di gzip o zip io uso un GZIPInputStream, nessun problema.

Per un Content-Encoding di "sgonfiare" Ho provato con InflaterInputStream e DeflaterInputStream , ma ottengo

  

java.util.zip.ZipException: sconosciuto   metodo di compressione           a java.util.zip.InflaterInputStream.read (InflaterInputStream.java:147)

Mi risulta che codifica "deflate" si riferisce a Zlib compressione, e secondo la docs questo dovrebbe essere gestita da InflaterInputStream.

È stato utile?

Soluzione

HTTP / 1.1, Content-encoding: deflate effettivamente si riferisce all'algoritmo di compressione DEFLATE, come definito dalla RFC 1951 , avvolto nel formato di dati zlib, come definito dalla RFC 1950 .

Tuttavia alcuni fornitori solo implementare l'algoritmo DEFLATE come definito RFC 1951, ignorando completamente RFC 1950 (intestazioni zlib).

Altri sono stati colpiti dallo stesso problema:

Per risolvere questo problema, tenta di creare un'istanza della InflaterInputStream superando un Inflater che è stato creato con il parametro nowrap insieme a true:

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

Altri suggerimenti

Purtroppo, utilizzando l'InflaterInputStream con un oggetto Inflater non sempre produrre la decompressione. Ho dovuto rilevare le intestazioni e dire al Inflater in cui l'offset per il carico utile è stato.

http://thushw.blogspot.com/ 2014/05 / decodifica-html-pagine-con-content.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top