Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中解压缩Gzip存档_Java_Gzip_Archive - Fatal编程技术网

在Java中解压缩Gzip存档

在Java中解压缩Gzip存档,java,gzip,archive,Java,Gzip,Archive,我正试图用Java解压大约8000个gzip格式的文件。我的第一次尝试是使用GZIPInputStream,但是性能很差 有人知道解压gzip档案的其他方法吗?我试过ZipInputStream,但它无法识别gzip格式 先谢谢你 对于这种规模,假设您的平台需求有限,您可能希望使用本机。您可以使用JNI调用库或使用ProcessBuilder调用本机命令 您需要使用缓冲。编写小块数据将是低效的。压缩实现采用Sun JDK中的本机代码。即使不是这样,缓冲性能通常也应该超过合理的文件或网络I/O O

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

有人知道解压gzip档案的其他方法吗?我试过ZipInputStream,但它无法识别gzip格式


先谢谢你

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

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

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

InputStream in = new BufferedInputStream(new GZIPInputStream(rawIn));
由于本机代码用于实现解压缩/压缩算法,因此在使用后要非常小心地关闭流(而不仅仅是底层流)。我发现到处都是“平减指数”,这对性能非常不利


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

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


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

您是解压缩要由java应用程序处理的文件,还是将其写入磁盘?由java应用程序处理。它们都将被编入索引。对于相同的操作,您的性能与CLI/gzip性能相比如何?测试读取和解压缩文件(以及丢弃结果数据)的速度可能也很有趣。如果您的问题是写文件,您可能需要进一步的缓冲和线程。有趣。这意味着解压步骤不是问题或无法改进。由于它使用本机代码,请务必关闭gzip流。