Fast Targz UnArchiver

时间:2019-09-17 13:53:03

标签: java gzip tar

以下问题:

我有一个tarGz存档,其中充满了约1000000个protoBuffer文件,我必须对其进行解压缩和处理。 目前,我发现的斋戒方法是用apache.commons的TarArchiveInputStream解开它的焦油。 目前,解压缩的部分是我的瓶颈,因为解压缩大约需要20分钟。

这可以更快吗? 是他们解压缩具有多个线程的targz文件的一种方法,我完全不知道这样做是否可行?

感谢您的帮助。

我的解压缩功能:

public void untar(String tarPath) throws IOException {
        try(TarArchiveInputStream fin = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(tarPath)))){
            UnzipperThreadHandler.setFinished(false);

            TarArchiveEntry entry;
            File out = new File((new File(tarPath).getParent())+"/help");

            while ((entry = fin.getNextTarEntry()) != null) {
                if (entry.isDirectory()) {
                    continue;
                }
                File curfile = new File(out, entry.getName());
                File parent = curfile.getParentFile();
                if (!parent.exists()) {
                    parent.mkdirs();
                }
                FileOutputStream fos = new FileOutputStream(curfile);
                IOUtils.copy(fin, fos);
                fos.close();
            }

            UnzipperThreadHandler.setFinished(true);
        }
    }

1 个答案:

答案 0 :(得分:0)

我不认为您的问题出在TarArchiveInputStream上,而在于FileOutputStream完全没有缓冲。您应该用BufferedOutputStream包裹它。

此外,IOUtils.copyLarge方法还允许您指定缓冲区大小。根据文件大小,您可能会从读取较大的块中获利。