用Java解压缩Gzip存档

时间:2009-03-10 17:41:26

标签: java gzip archive

我正在尝试用Java解压缩大约8000个gzip格式的文件。我的第一次尝试是使用GZIPInputStream,但性能很差。

任何人都知道解压缩gzip档案的替代方法吗?我尝试了ZipInputStream,但它没有识别gzip格式。

提前谢谢你。

3 个答案:

答案 0 :(得分:8)

您需要使用缓冲。编写小块数据将是低效的。压缩实现采用Sun JDK中的本机代码。即使不是缓冲性能,通常也应该超过合理的文件或网络I / O.

OutputStream out = new BufferedOutputStream(new GZIPOutputStream(rawOut));

InputStream in = new BufferedInputStream(new GZIPInputStream(rawIn));

由于本机代码用于实现解压缩/压缩算法,因此在使用后要非常小心地关闭流(而不仅仅是底层流)。我发现有很多“Deflaters”闲置在非常对性能不利。

ZipInputStream处理文件档案,这与压缩流完全不同。

答案 1 :(得分:4)

当你说GZipInputStream的表现糟糕时,你会更具体吗?您是否发现它是CPU瓶颈还是I / O瓶颈?您是否在输入和输出上使用缓冲?如果您可以发布您正在使用的代码,那将非常有用。

如果您使用的是多核计算机,则可以尝试使用GZipInputStream,但使用多个线程,每个核心一个,仍然需要处理共享的文件队列。 (任何一个文件只能由一个线程处理。)如果你受I / O限制,可能会使事情变得更糟,但值得一试。

答案 2 :(得分:-2)

对于这种规模,假设您的平台要求有限,您可能希望本机化。您可以使用JNI调用库或使用ProcessBuilder调用本机命令。