【问题标题】:Can OS X gzip be configured to match Java GZIPOutputStream?可以将 OS X gzip 配置为与 Java GZIPOutputStream 匹配吗?
【发布时间】:2014-02-28 14:29:43
【问题描述】:

我正在尝试比较在 Java 和 CLI gzip 命令上通过 GZIP 运行字符串的输出。输出不一样,我已经弄清楚原因,但不知道如何让它们相互配合。

我已经阅读了一些关于 SO 的问题,阅读了 gzip 的手册页以及 GZIPOutputStream 和 DeflaterOutputStream 的代码。 GZIPOutputStream(通过 Deflator 设置)的默认压缩级别是“-1”,几乎没有解释这意味着什么。此外,gzip CLI 只允许 1 到 9 之间的值,包括 1 和 9。

那么有没有一种方法可以更改 Java 或 gzip 命令中的压缩设置以使它们产生相同的输出?

【问题讨论】:

  • 您是否尝试过从 Java 中的默认压缩级别更改为像这样的另一个? OutputStream gzipout = new GZIPOutputStream(bos){{def.setLevel(Deflater.BEST_COMPRESSION);}};可能匹配 gzip --best (or -9)
  • @MarkSetchell 这是一个有趣的想法,但这将在构造函数完成它的其他操作之后设置级别,此时已经设置了默认压缩,写入标题等。

标签: java macos gzip gzipoutputstream


【解决方案1】:

没有。 Java 正在使用 zlib 压缩器,它源自旧的 gzip 命令行实用程序压缩器,但并不完全相同。它们通常不会产生相同的输出,并且没有设置强制它们这样做。

压缩级别-1请求默认压缩级别,在当前zlib实现中是级别6

我不得不问你为什么要让他们的输出相同。重要的是压缩是无损的,即 gzip 和 Java 压缩流在解压缩时会产生相同的原始数据。例如,不要求不同版本的 zlib 在相同的压缩级别下产生相同的输出。

【讨论】:

  • 这也是我的想法,但需要证实我的怀疑。这是“权力”的要求,我需要一个明确的理由,而不是“只做一次往返测试更有意义”,因为这似乎不够令人信服。因此,不同版本的输出不同肯定会使任何编码比较无效,并为以后的每个人省去很多麻烦。感谢您及时明确的回答。
猜你喜欢
  • 2015-03-16
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 2020-10-25
  • 2011-11-26
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
相关资源
最近更新 更多