2

我必须从包含超过 100000 个文件的 zip 文件中读取文件,并且我使用的是 Java 1.6,所以我暂时使用 Apache commons 压缩库。但是,ZipFile() 的构造函数需要大约 30 秒才能返回。(我承认我使用的机器已经过时了,一台具有 8GB RAM 的 C2D E6550,但如果 zip 文件的文件少于 65535 个,构造函数几乎会立即返回)

现在我需要加快速度,因为我们的程序非常频繁地打开 zip 文件,而 ZipFile 构造函数所花费的时间实在是太长了。我有两个选择:1)将 zip 文件拆分为具有 <65535 个文件的卷或 2)缓存 ZipFile 对象并重用它

但是,两者都需要大量的重构/重写,所以在我继续使用任何一种解决方案之前,有没有办法使用不同的库加速读取 zipfile,或者我在 Apache commons compress 上做错了什么?这就是我创建 zipfile 对象的方式:

final File f =  new File(zipFileName);
if(f.exists() == false)
    throw new FileNotFoundException(zipFileName);
ZipFile zip = new ZipFile(f);

关于如何解决这个问题的任何想法?

4

1 回答 1

1

通过查看源代码,它正在打开 zip 文件并立即读取所有条目。它将这些信息存储在内部哈希映射中,这些哈希映射最初的大小不适合您的用例。所有的重新散列都可能是问题所在。但很难确定。您应该使用探查器执行它以查看时间花费在哪里。

您还可以获取 apache commons 的源代码并制作您自己的版本,这样您就可以控制初始大小以查看是否有帮助。

如果没有,你总是可以在一个单独的线程中构造这个对象,并在构造它时做一些其他有用的事情。

于 2012-11-06T18:04:09.613 回答