因此,我試圖用Java以zip方式進行只讀訪問,使用多線程方式進行解壓縮,因爲我的ZipFile/ZipEntry標準簡單單線程解決方案使用枚舉和輸入流以及什麼不會導致它花費大約五整秒來解壓縮到內存中一個50兆zip文件,這需要一秒AT MOST讓我的磁盤無需解壓縮即可讀取。Java中的多線程解壓縮
但是,整個Java zip庫同步到令人難以置信的惡劣程度,毫無疑問,因爲它都是抽象的讀/寫/等。在相同的代碼中,而不是具有高效的非同步只讀代碼。
我已經看過第三方Java庫,它們都是比使用大象槍射擊蒼蠅更糟糕的海量VFS庫,否則他們獲得性能優勢的唯一原因是他們多線程無論如何,大部分線程都在磁盤IO上阻塞。
我只想把一個zip文件拉到一個byte []中,分叉一些線程,然後處理它。沒有任何理由需要以任何方式進行任何同步,因爲我在內存中分別使用每個解壓縮文件而沒有交互。
這爲什麼這麼難?
你緩衝自己的輸入和輸出? –
你是什麼意思「拉一個zipfile到一個字節[]」?你的意思是你把它全部讀到一個字節數組中嗎?如果是這樣,它是壓縮格式還是解壓縮格式?以及如何處理文件太大而無法將所有內容保存到字節數組中?我認爲如果你不把它全部放入RAM中,你將回到單個文件被多個線程使用的問題,這通常不會給你任何優於單個線程的優勢。 –
這些文件都不會很大:它們全都適合記憶,空間很小,不會有問題。但使用zip文件的隨機訪問特性會影響性能,而一次讀取整個文件然後在內存中使用它會更好,因爲硬盤驅動器在優化讀取操作方面非常出色。 – JAKJ