2016-03-04 11 views
6

scenario è di leggere un file gzip (estensione .gz)Come leggere da GZIPInputstream

avuto modo di conoscere che c'è classe GZIPInputStream per gestire questa situazione.

Ecco il codice per convertire l'oggetto file in GZIPStream.

FileInputStream fin = new FileInputStream(FILENAME); 
GZIPInputStream gzis = new GZIPInputStream(fin); 

Il dubbio è come leggere il contenuto di questo oggetto "gzis"?

+4

Sono confuso, cioè solo un InputStream, lo si legge come qualsiasi altro InputStream. – njzk2

+1

potresti anche confondere zip e gzip. – njzk2

+0

Sì, il suo gzip not zip.I aggiornato. – Aajan

risposta

10

Decodifica i byte da un InputStream, è possibile utilizzare un InputStreamReader. BufferedReader ti consentirà di leggere il tuo flusso riga per riga.

Se la zip è un file di testo

ByteArrayInputStream bais = new ByteArrayInputStream(responseBytes); 
GZIPInputStream gzis = new GZIPInputStream(bais); 
InputStreamReader reader = new InputStreamReader(gzis); 
BufferedReader in = new BufferedReader(reader); 

String readed; 
while ((readed = in.readLine()) != null) { 
    System.out.println(readed); 
} 

Come notato nei commenti. Ignorerà la codifica e forse non funzionerà sempre correttamente.

soluzione migliore

Si scriverà i dati non compressi al DestinationPath

FileInputStream fis = new FileInputStream(sourcePath); 
FileOutputStream fos = new FileOutputStream(destinationPath); 
GZIPInputStream gzis = new GZIPInputStream(fis); 
byte[] buffer = new byte[1024]; 
int len = 0; 

while ((len = gzis.read(buffer)) > 0) { 
    fos.write(buffer, 0, len); 
} 

fos.close(); 
fis.close(); 
gzis.close(); 
+1

Supponendo che il contenuto gzip sia di testo e non di dati binari. – Andreas

+0

Questo presuppone che il contenuto sia testo e composto da linee. E ignora quale codifica avrebbe potuto essere utilizzata – njzk2

+0

Il contenuto è solo testo. Cosa intendi indicando la codifica? – Aajan

1

ho raccomandato di utilizzare Apache Commons Compress API

aggiungere Maven dipendenza:

<dependency> 
    <groupId>org.apache.commons</groupId> 
    <artifactId>commons-compress</artifactId> 
    <version>1.10</version> 
</dependency> 

poi noi e classe GZipCompressorInputStream, esempio descritto here