繁体   English   中英

解压 Java 中的 Gzip 压缩包

[英]Decompress a Gzip archive in Java

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

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

先感谢您。

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

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

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

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

ZipInputStream处理文件的存档,这与压缩 stream 完全不同。

当您说GZipInputStream的性能很糟糕时,您能更具体一点吗? 您是否发现它是 CPU 瓶颈还是 I/O 瓶颈? 您是否在输入和 output 上都使用了缓冲? 如果您可以发布您正在使用的代码,那将非常有帮助。

如果您在多核机器上,您可以尝试仍然使用GZipInputStream ,但使用多个线程,每个核心一个,还有一个共享的文件队列仍有待处理。 (任何一个文件都只能由一个线程处理。)如果您受 I/O 限制,这可能会使事情变得更糟,但它可能值得一试。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM