Suche in einer komprimierten (.gz) Datei mit Java

Suche in einer komprimierten (.gz) Datei mit Java

Wir haben große Dateien, in denen wir Mustersuchen durchführen müssen. Es sieht so aus, als ob GZIPInputStream die Datei im Speicher dekomprimiert und ich dann eine Suche darin durchführen muss. Im Speicher nimmt eine dekomprimierte Datei beispielsweise 600 MB ein und wir erhalten mindestens 10 Anfragen an unseren Server und können es uns nicht leisten, 2- oder 3-GB-Dateien im Speicher zu durchsuchen. Wir suchen nach einer Möglichkeit, Zeile für Zeile zu dekomprimieren und die Suche durchzuführen? (oder) irgendeine andere Lösung für dieses Problem.

Antwort1

ZLib unterstützt partielle und sequentielle Dekomprimierung, sodass Sie einen Teil der GZIP-Datei einlesen können (denken Sie jedoch daran, dass GZIP-Dateien einen Header haben) und util.zip.Inflater mit der Anzahl an Bytes aufrufen können, von der aus Sie die Datei aufblasen möchten.

Beachten Sie insbesondere die Methode

setInput(byte[] b, int off, int len)

Dadurch können Sie bei off Bytes in der GZIP-Datei beginnen und von diesem Punkt an len Bytes einlesen und dekomprimieren.

Javadoc ist hier:http://docs.oracle.com/javase/6/docs/api/java/util/zip/Inflater.html

verwandte Informationen