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

时间:2014-02-11 20:23:59

标签: gzip zlib deflate

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

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

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

但是我发现无法将这样的字典写入文件。是否可以在我的词典/词典中添加一些标题,或以其他方式使gzip解压缩用FDICT = 1编码的数据?

P.S。我试图使用Java的Deflate类来完成它,但是对以这种方式压缩的块的实际gzip支持感兴趣。

1 个答案:

答案 0 :(得分:4)

你正在混淆两个不同的概念,所以我不确定你在说什么。

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

另一个概念是预定义的字典,它是一个32K的数据块,用于预加载搜索匹配字符串的滑动字典。这只有zlib支持。不可能为gzip流提供预定义的字典。您关于" deflate"的链接实际上是zlib格式的链接,这是定义FDICT的地方。