4

Apache Commons Compress for Java を使用して、複数のログ ファイルを 1 つのアーカイブに圧縮します tar.bz2

ただし、1日に約20GBのファイルを圧縮するため、圧縮には非常に長い(12時間以上)かかります。

このライブラリはファイルをモノスレッドで圧縮するため、これをマルチスレッドで行う方法があるかどうか知りたいです。

多くの解決策 (コマンドライン pbzip2 またはいくつかの C++ ライブラリ) を見つけましたが、Java について見つけたのは次のブログ投稿だけです。

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

Java アプリケーションでは使用できないようです。

そこに何かありますか?あなたは何をお勧めします?または、 bzip2 のような同様の圧縮率を持つ別のより高速なソリューションはありますか?

4

3 に答える 3

2

複数のファイルがあるため、各ファイルを別のスレッドで圧縮できます。プロセスは CPU バウンドであるため、固定サイズのスレッド プール、つまり ExecutorService を作成し、圧縮するファイルごとにタスクを追加することをお勧めします。

注: pbzip2 で目的が達成される場合は、Java から呼び出します。私が見た Java 用の BZIP2 ライブラリは (JAR、ZIP、および GZIP とは異なり) ネイティブに実装されているため、1 つのスレッドでも高速であることがわかる場合があります。

于 2012-12-26T21:15:17.067 に答える
1

Java での bzip2 の並列実装が存在しない場合は、Java アプリケーション内からpbzip2を呼び出すことに頼ることができます。

于 2012-12-26T22:16:55.003 に答える
0

BZip2OutputStream の at4j 実装を試してください。マニュアルによると、並列圧縮をサポートしています。 http://at4j.sourceforge.net/releases/current/pg/ch04.xhtml

于 2014-08-19T07:44:24.037 に答える