2017-07-14 3 views
4

Ich möchte eine gezippte Datei progammatisch herunterladen und dekomprimieren, aber anstatt zu warten, bis sie vollständig heruntergeladen wurde, bevor ich sie entziffere, möchte ich sie während des Herunterladens entpacken, das heißt, sie entzippe sie im laufenden Betrieb. Ist das überhaupt möglich, oder verhindert das gzipierte Format eine solche Dekompression im laufenden Betrieb?Ist es möglich, eine gezippte Datei während des Downloads zu dekomprimieren?

Ich bin natürlich in der Lage, die GZIPInputStream-Bibliothek von Java zu verwenden, um eine Datei Teil für Teil auf einem lokalen Dateisystem zu dekomprimieren, aber im lokalen Dateisystem habe ich offensichtlich die vollständige GZIP-Datei. Aber ist das möglich, wenn ich nicht die vollständige gziped-Datei vorher habe, wie im Falle des Downloads aus dem Internet oder Cloud-Speicher?

+2

Ja, es ist in Ordnung. 'gzip' ist wie die meisten anderen Komprimierungsformate perfekt streambar. –

Antwort

1

Da Ihre URL-Verbindung ein Eingabestream ist und Sie den gzipinputstream mit einem Eingabestream erstellen, denke ich, dass dies ziemlich einfach ist?

public static void main(String[] args) throws Exception { 
    URL someUrl = new URL("http://your.site.com/yourfile.gz"); 
    HttpURLConnection someConnection = (HttpUrlConnection) someUrl.openConnection(); 
    GZIPInputStream someStream = new GZIPInputStream(someConnection.getInputStream()); 
    FileOutputStream someOutputStream = new FileOutputStream("output.tar"); 
    byte[] results = new byte[1024]; 
    int count = someStream.read(results); 
    while (count != -1) { 
     byte[] result = Arrays.copyOf(results, count); 
     someOutputStream.write(result); 
     count = someStream.read(results); 
    } 
    someOutputStream.flush(); 
    someOutputStream.close(); 
    someStream.close(); 
} 
+0

Erstaunlich. Ich werde diese Lösung versuchen. – pythonic

Verwandte Themen