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