如何提高读取tar.gz文件夹中文件的性能?

时间:2013-09-18 07:29:38

标签: java zip gzip tar gzipinputstream

我已成功阅读tar.gz格式文件夹中的pdf文件。但我面临性能问题 - 花更多时间打开包含1000多个小pdf文件的tar.gz文件夹,每个文件大小10 - 25 MB。文件夹的总大小为2GB

如何提高解压缩文件读取的性能?

FileInputStream fin = new FileInputStream(tarName);
BufferedInputStream in = new BufferedInputStream(fin);
GzipCompressorInputStream gzIn = new GzipCompressorInputStream(in);
TarArchiveInputStream tarIn = new TarArchiveInputStream(gzIn);
TarArchiveInputStream tarIn1 = new TarArchiveInputStream(tarIn);
TarArchiveEntry entry = null;

byte[] buffer = new byte[5024];
int nrBytesRead;

while ((entry = (TarArchiveEntry) tarIn1.getNextEntry()) != null) {
    System.out.println("it finds a file "
                         + entry.getName().toString());
    if (entry.getName().toString().equals(fileName)) {

        while ((nrBytesRead = tarIn1.read(buffer)) > 0) {

            out.write(buffer, 0, nrBytesRead);
        }
        break;
    }
}

1 个答案:

答案 0 :(得分:1)

tar.gz格式不是为随机访问而设计的。它的目的是在整个包装一次打开包装的时候。这允许将一系列文件压缩为单个流,通常可以改善压缩,尤其是对于许多小文件。但是,如果您尝试从中间某处提取一个文件,则需要首先将所有文件解压缩到该点。

对于单个文件的随机访问,您应该考虑使用zip格式重新打包。压缩不会那么好,你可以很快地拔出单个文件。在Java中,查看ZipFile class