Dies könnte eher eine theoretische Frage sein. Ich habe ein Szenario, in dem eine komprimierte Datei (~2 GB) in eine größere Datei (~22 GB) dekomprimiert wird. Dieser Prozess dauert ungefähr 20 Minuten, was wiederum bedeutet, dass ich ungefähr 19 Minuten und 59 Sekunden jedes Mal verschwende, wenn dieser Prozess ausgeführt wird. Meine Frage ist folgende: Ist es möglich, einen Stream aus der Datei zu öffnen, die dekomprimiert wird, und die Informationen an ein separates Programm weiterzugeben, das die Daten manipuliert? Grundsätzlich ist jeder Zeile in der Datei ein Datensatz, aber ich konnte keine Technik finden, um festzustellen, wann eine Zeile während der Dekomprimierung vollständig decodiert wurde. Allgemeine Algorithmen oder Java-Bibliotheken sind von Wert.
Antworten
Zu viele Anzeigen?Ja, das ist einfach. In Unix könnten Sie das tun
bzcat compressedfile.bz2 | mainprogram
Dann kann Ihr Hauptprogramm den dekomprimierten Stream auf der Standardeingabe lesen. Ähnliche Befehlszeilenprogramme existieren für zip und gzip.
Wenn das Hauptprogramm anstelle der Standardeingabe aus einer Datei lesen muss, verwenden Sie eine benannte Pipe.
Wenn Sie Windows verwenden, gibt es möglicherweise ähnliche Tools oder auch nicht.
Sie können java.util.zip
's GZIPInputStream
verwenden, um die gzip-Datei sequentiell zu lesen. Dann können Sie Ihre eigene Pufferung implementieren und Zeilen extrahieren, oder BufferedReader
mit der Methode readLine
verwenden.