如何在Java中控制文件压缩参数以更快地解压缩对象?

时间:2014-06-09 12:04:21

标签: java performance zip compression bzip2

我正在写一个文件,我创建了一些大型Java对象,后来又读回来了。我正在使用压缩,因为对象非常大,我有大约600个不同的实例(每个都在一个单独的文件中)。我目前正在使用bzip2和Apache的org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream

import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
import org.apache.commons.lang3.SerializationUtils;

InputStream in = new BZip2CompressorInputStream(new FileInputStream("myfile.bz2"));
Document doc = (Document) SerializationUtils.deserialize(in);

问题是目前解压缩需要很长时间(超过10秒),因此读取所有600个对象大约需要两个小时。我想要使​​用更快的压缩类,或者控制当前类的参数,以便减压更快(我最担心的是减压时间,因为它多次发生,慢速压缩是可忍受的)。我也愿意为减压速度付出更大压缩文件的价格。

使用不同的软件进行压缩时,通常可以选择“压缩级别”,其值为“最快”,“快速”,“正常”,“最佳”。有时您甚至会获得更多参数,如“压缩方法”,“字典大小”,“字大小”等。

有人知道如何通过代码控制这些参数,以及推荐的值是什么?或者只知道快速减压类?

1 个答案:

答案 0 :(得分:3)

BZip2获得了非常好的压缩比,但代价是速度很慢。在频谱的另一端是类似snappy的东西,速度非常快,但压缩率却没有那么好。 GZip在中间。

Here是java中一些压缩基准测试的列表。