是否可以使用静态字典创建有效的 gzip?

dbo*_*tin 2 gzip zlib deflate

我正在尝试使用使用静态/预设字典gzip的 DEFLATE 算法编码的数据创建有效的 gzip 文件(可以使用标准 linux 解压缩) 。

我已经阅读了DEFLATEgzip的规范,看起来这是不可能的。正如我从 DEFLATE 规范中得到的,压缩数据块有两种编码类型:

  • 使用动态字典(滑动窗口)压缩,此类块以FDICT标志设置为 的标头开头0
  • 用静态压缩(预设字典),用FDICT = 1

但我发现没有办法实际将这样的字典写入文件。是否可以在我的字典中添加一些标头,或者以其他方式使 gzip 解压缩用 编码的数据FDICT = 1

PS 我正在尝试使用 Java 的Deflate类来完成它,但对以这种方式压缩的块的实际 gzip 支持感兴趣。

Mar*_*ler 5

您混淆了两个不同的概念,所以我不确定您在谈论哪个。

有些 deflate 块使用静态霍夫曼代码,通常在压缩非常少量的数据时使用。通常使用动态霍夫曼代码,其中针对该特定块优化的代码在块的开头发送。对于少量数据,例如 100 字节,代码描述的开销将主导输出的大小。相反,将使用静态代码,这可以避免以较少压缩为代价的开销。但总体而言,结果较小。所有 deflate 应用程序(gzip、zlib、png 等)都支持所有 deflate 块类型。

另一个概念是预定义字典,它是预加载滑动字典的 32K 数据块,在滑动字典中搜索匹配的字符串。只有 zlib 支持。无法为 gzip 流提供预定义的字典。您的“deflate”链接实际上是指向 zlib 格式的链接,这是定义 FDICT 的地方。