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