【发布时间】:2026-02-04 15:00:01
【问题描述】:
我正在将我创建的一些大型 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 个对象大约需要两个小时。我想要么使用更快的压缩类,要么控制当前类的参数,以便解压更快(我最担心解压时间,因为它会发生很多次,慢速压缩是可以忍受的)。为了解压速度,我也愿意付出更大的压缩文件的代价。
当使用不同的软件进行压缩时,您通常可以选择“压缩级别”,例如“Fastest”、“Fast”、“Normal”、“Best”等值。有时您甚至可以获得更多参数,例如“压缩方法”、“字典大小”、“字大小”等。
有谁知道如何通过代码控制这些参数,有哪些推荐值?还是只知道快速解压类?
【问题讨论】:
-
解压时的瓶颈是什么?可能是其他类似无缓冲输入的东西。
-
速度也取决于所需数据结构的大小。它越大,签入的速度越慢,并且对于大多数类型的数据而言优势正在减弱。
-
只是为了好玩,尝试将所有文件都_un_compressed文件做一些实验,看看速度如何。
标签: java performance zip compression bzip2