2015-08-19 19 views
6

Sto cercando di ottenere un file zip dal server. Im usando HttpURLConnection per ottenere InputStream e questo è quello che ho:Come decomprimere il file da InputStream

myInputStream.toString().getBytes().toString() is equal to [[email protected] 

byte[] bytes = Base64.decode(myInputStream.toString(), Base64.DEFAULT); 
String string = new String(bytes, "UTF-8"); 
string == �&ܢ��z�m����y.... 

ho davvero cercato di decomprimere il file, ma non funziona niente, c'è anche tante domande, devo usare GZIPInputStream o ZipInputStream? Devo salvare questo flusso come file o posso lavorare su InputStream

prega di aiuto, il mio capo sta diventando impaziente: O Non ho idea di quello che è in questo file devo scoprire :)

+1

Controllare [questo] (http://stackoverflow.com/a/3223510/916225) per il download di –

+0

scrittura questo zip file su sdcard e quindi provare a decomprimerlo. Non dimenticare di dare permesso di lettura e scrittura – AmniX

+0

L'uso di 'inputStream.toString()' non fa certamente quello che pensi che faccia. Proprio come 'java.io.File.toString()' non stampa i ** contenuti ** di un file come String, ma qualcos'altro (il percorso del file), che è inutile se sei interessato al contenuto . – GPI

risposta

-1

in pratica impostando inputStream per essere GZIPInputStream dovrebbe essere in grado di leggere il contenuto effettivo. anche per semplicità utilizzando IOUtils pacchetto dal apache.commons rende la vita facile

questo funziona per me:

InputStream is ; //initialize you IS 
    is = new GZIPInputStream(is); 
    byte[] bytes = IOUtils.toByteArray(is); 
    String s = new String(bytes); 
    System.out.println(s); 
+1

Mentre questo codice può risolvere il problema dell'OP, alcune parole di spiegazione sarebbero ancora più utili per i futuri lettori. – Thom

+1

@TheThom sì, è giusto amico, scusa ero un po 'occupato al momento del post. Ho modificato il mio post. – nafas

-1

Di solito, non v'è alcuna differenza significativa tra GZIPInputStream o ZipInputStream, quindi se non del tutto, entrambi dovrebbero funzionare.

Successivamente, è necessario identificare se il flusso compresso era codificato Base64, o se alcuni contenuti codificati Base64 sono stati inseriti in un flusso compresso - da quello che hai inserito nella tua domanda, sembra essere quest'ultima opzione.

Così si dovrebbe provare

ZipInputStream zis = new ZipInputStream(myInputStream); 
ZipEntry ze = zis.getNextEntry(); 
InputStream is = zis.getInputStream(ze); 

e procedere da lì ...

+0

Spazzatura. Una volta è un metodo di compressione del flusso: l'altro è un sistema per la compressione di un set di file. – EJP

+0

@EJP: anche se dichiarasse qualcosa di immondizia, sarebbe apprezzato il testo corretto: ONE è un metodo di compressione del flusso (GZIPInputStream), l'altro è un metodo per COMPRESSERE un set di file (ZipInputStream). E qualche altro dettaglio sul perché la risposta dovrebbe essere spazzatura sarebbe anche bello - e quando lo sai meglio, perché non hai risposto alla domanda? – tquadrat