我必須從zip文件中讀取包含超過100000個文件的文件,並且我使用的是Java 1.6,因此我暫時使用Apache commons compress庫。但是,ZipFile()的構造函數需要大約30秒才能返回。 (我承認我的機器已經過時了,C2D E6550有8GB內存,但如果zip文件少於65535個文件,構造函數幾乎立即返回)ZipFile的構造函數在Java/Apache Commons中壓縮zip64文件壓縮
現在我需要加速它,因爲我們的程序非常頻繁地打開zip文件,ZipFile構造函數花費的時間太長了。我有兩個選擇: 1)拆分壓縮文件到每個卷與< 65535文件 或 2)高速緩存的ZipFile對象和重用
然而,無論是需要重構的顯著量/修改,只有這樣我纔去上無論是解決方案,有沒有辦法加快閱讀與不同的庫zipfile文件,或者我做錯了Apache公共壓縮?這是我如何創建zipfile對象:
final File f = new File(zipFileName);
if(f.exists() == false)
throw new FileNotFoundException(zipFileName);
ZipFile zip = new ZipFile(f);
有關如何解決此問題的任何想法?
按照你的建議,改變了hashmap的初始大小,運行profiler來檢查構造函數完成所花費的時間。它將時間縮短了一半,但仍然超過我們的預算。我想我將不得不硬着頭皮在我的代碼中進行一些重構。 – Yenchi
如果您能夠將散列表更改爲樹形圖。你也可以總是使用zip unix命令,但htat可能會「違反規則」。 – Sam
@sam謝謝你建議的樹形圖。但是,通過爲地圖指定預定義大小(例如100000),創建地圖的時間不再是瓶頸。這是另一個功能,它掃描整個zip文件的中心目錄。但鑑於它必須掃描100000條記錄,很難指望它很快完成。 – Yenchi