我必须从包含超过100000个文件的zip文件中读取文件,并且我正在使用Java 1.6,因此我暂时使用Apache commons压缩库。但是,ZipFile()的构造函数大约需要30秒才能返回。 (我承认我所使用的机器已经过时了,带有8GB RAM的C2D E6550,但如果zip文件的文件少于65535,则构造函数几乎立即返回)
现在我需要加快速度,因为我们的程序经常打开zip文件,而ZipFile构造函数所用的时间太长了。我有两个选择: 1)将zip文件拆分成每个包含< 65535文件的卷 要么 2)缓存ZipFile对象并重用它
然而,在我继续使用任何一个解决方案之前,两者都需要进行大量的重构/重写,有没有办法加快使用不同的库读取zip文件,或者我对Apache commons压缩有问题?这就是我创建zipfile对象的方式:
final File f = new File(zipFileName);
if(f.exists() == false)
throw new FileNotFoundException(zipFileName);
ZipFile zip = new ZipFile(f);
有关如何解决此问题的任何想法?
答案 0 :(得分:1)
通过查看source code,它会打开zip文件并立即读取所有条目。它将此信息存储在内部哈希映射中,这些哈希映像最初的大小不适合您的用例。所有的重组都可能成为问题。但很难确定。您应该使用分析器执行它以查看花费的时间。
你也可以获取apache commons的源代码并制作你自己的版本,它允许你控制初始大小调整,看看是否有帮助。
如果没有,你总是可以在一个单独的线程中构造这个对象,并在构造它时做一些有用的事情。