[英]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.