Ich muss eine .gz-Datei mit einem FileChannel lesen / entpacken.
Ich habe mit dem Extrahieren von GZIP-Archiven mit GZIPInputStream experimentiert, aber das erfordert keinen FileChannel. Ich habe keinen Zugriff auf den ursprünglichen FileInputStream, aus dem der FileChannel stammt.
Wenn jemand mir einen guten Weg (oder zumindest irgendeinen Weg) beim Lesen von GZIP von einem FileChannel erzählen könnte, würde ich es sehr schätzen.
Angepasst an eine Frage in den
Sie können einen umschließenden InputStream um den FileChannel erhalten:
%Vor%Kanäle befinden sich in Java SE.
Ja, es gibt eine Lösung. Die Implementierung von GZip ist ziemlich einfach. Sie benötigen einen Inflater und CRC32 sowie den Header / Trailer. Leider nimmt java.util.zip.Inflater
nur byte[]
, was suboptimal ist (ein direkter Puffer wäre effizienter gewesen). Dennoch ist die Verwendung von nicht-direktem Puffer und ByteBuffer.array () eine Option.
Der eingebaute java.util.zip.CRC32
ist ziemlich langsam und wird in Java neu implementiert ein schöner Schritt in Richtung Leistung. com.jcraft.jzlib
bietet reine Java-Implementierung (sieht fast wie reines C aus) und es ist möglich, das Byte zu ersetzen [] w / direkter Puffer. Die Library ist etwas langsamer im Vergleich zu inflater (decompress), weil zu viele Grenzen überprüft werden und es nicht möglich ist, so tief inline zu arbeiten. Es ist jedoch schneller bei der Komprimierung.
Tags und Links java zip gzip nio filechannel