我正在尝试使用带有静态/预设字典的DEFLATE算法编码的数据创建有效的gzip文件(可使用标准linux gzip
解压缩)。
我已经阅读了DEFLATE和gzip的两个规格,看起来这是不可能的。从DEFLATE规范中可以看出,压缩数据块有两种类型的编码:
FDICT
开头,标题设置为0
。FDICT = 1
但是我发现无法将这样的字典写入文件。是否可以在我的词典/词典中添加一些标题,或以其他方式使gzip解压缩用FDICT = 1
编码的数据?
P.S。我试图使用Java的Deflate
类来完成它,但是对以这种方式压缩的块的实际gzip支持感兴趣。
答案 0 :(得分:4)
你正在混淆两个不同的概念,所以我不确定你在说什么。
存在使用静态霍夫曼代码的deflate块,这些代码通常在压缩非常少量的数据时使用。通常使用动态霍夫曼码,其中针对该特定块优化的代码在块的开始处发送。对于少量数据,例如100字节,该代码描述的开销将主导输出的大小。相反,将使用静态代码,这可以避免以较少压缩为代价的开销。但总体而言,结果更小。所有deflate应用程序(gzip,zlib,png等)都支持所有deflate块类型。
另一个概念是预定义的字典,它是一个32K的数据块,用于预加载搜索匹配字符串的滑动字典。这只有zlib支持。不可能为gzip流提供预定义的字典。您关于" deflate"的链接实际上是zlib格式的链接,这是定义FDICT的地方。