3

我使用Apache Commons Compress for Java來日誌文件壓縮多爲tar.bz2存檔。並行bzip2壓縮檔

但是,壓縮需要很長的時間(> 12小時),因爲我每天壓縮大約20GB的文件。

由於這個庫壓縮文件單線程,我想知道是否有辦法做到這一點多線程。

我發現很多的解決方案(命令行pbzip2或一些C++庫),但我發現for Java是這個博客帖子:

https://plus.google.com/117421466255362255970/posts/3jfKVu325zh

看來,我不能在我的Java應用程序中使用它。

那裏有什麼嗎?你會推薦什麼?或者是否有另一種類似bzip2的壓縮率更快的解決方案?

+0

我不知道這是否在你的觸及範圍內,但你總是可以嘗試編寫自己的bzip2的多線程實現? –

+0

嘿傑西,是的,這會是膨脹,但是這肯定我夠不着的地方。 – Stefan

+1

如何在Java應用程序中調用http://compression.ca/pbzip2/? – reprogrammer

回答

1

由於您有多個文件,您可以在不同的線程中壓縮每個文件。由於你的進程是CPU綁定的,我建議創建一個固定大小的線程池,即一個ExecutorService,併爲每個要壓縮的文件添加一個任務。

注:如果pbzip2做你想做的事,我會從Java調用它。你可能會發現即使是一個線程也是如此,因爲我見過的用於Java的BZIP2庫本地實現(不像JAR,ZIP和GZIP)

+0

我有多個文件,但它應該產生一個大的TAR.BZ2文件 - 所以它只是一個被壓縮 – Stefan

+0

壓縮文件是串行即文件。基於之前發生的事情。我不知道其他圖書館如何解決這個問題。您可以創建一個.bz2.tar文件。 –

+0

@Peter Lawrey:Normaly你先做*焦油*得到壓縮穿越而過多個文件,以提高壓縮比。 – MrSmith42

1

如果在Java中並行實現bzip2沒有退出,從您的Java應用程序中調用pbzip2