java.util.zip.GZIPOutputStream
不为其底层的压缩级别提供构造函数参数或设置器Deflater
。
有一些方法可以解决此问题,如此处所述,例如:
GZIPOutputStream gzip = new GZIPOutputStream(output) {
{
this.def.setLevel(Deflater.BEST_COMPRESSION);
}
};
我用这个压缩了一个 10G 的文件,与使用预设相比,它的大小没有减少一点DEFAULT_COMPRESSION.
这个问题的答案是,在某些情况下,设置级别可能无法按计划进行。为了确保,我还尝试创建一个新的:Deflater
this.def = new Deflater(Deflater.BEST_COMPRESSION, true);
但是文件大小仍然没有减少......
他们是否有理由不提供对Deflater
级别的访问权限?
还是上面的代码示例有问题?
deflater 级别是否有效?
编辑:感谢您的评论。
文件可以进一步压缩吗?
这是一个使用默认压缩从 10G 压缩到 10M 的 UTF-8 文本文件。因此,在不了解压缩级别的详细信息的情况下,我认为它可以进一步压缩。
DEFAULT_COMPRESSION
和之间的时差BEST_COMPRESSION
?我没有时间创建真正可靠的数字。但是我在每个压缩级别执行了大约五次代码,并且都花费了大约相同的时间(2 分钟 +/- 5 秒)。
文件大小与
gzip -v9
? gzip 创建的文件比 java 创建的文件小约 15KB。因此,对于我的特定用例,不值得进一步研究这个主题。
然而,上述三个基本问题仍然存在。任何人都曾使用更高的压缩级别成功地减少文件GZIPOutputStream
?