4

我正在使用Apache Commons Compress for Java 将多个日志文件压缩到一个存档 tar.bz2中。

但是,压缩需要很长时间(> 12 小时),因为我每天压缩大约 20GB 的文件。

由于这个库压缩文件单线程,我想知道是否有办法做到这一点多线程。

我找到了很多解决方案(命令行 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 不同)

于 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 回答