【发布时间】:2014-06-29 22:45:51
【问题描述】:
或者更准确地说,当两个相同的字符串相互连接时,为什么 zlib 不能缩小 整个 第二个字符串?似乎当匹配的字符串紧跟在同一字符串的前一个实例之后开始时,zlib 将第一个字符作为字符串文字发出,然后发出对前一个字符串减去第一个字符的向后引用。
例如,如果我使用 zlib 对字符串 latelate 进行放气,则输出是 5 个字符串文字,后跟一个反向引用...
l a t e l <len=3, dist=4>
或霍夫曼编码...
0000000 cb 49 2c 49 cd 01 62 00
0000010
我通过使用“原始”放气流(即 windowBits = -15)和固定霍夫曼编码(即压缩策略为 Z_FIXED)简化了输出。
为什么 zlib 必须在使用对“ate”的反向引用之前发出第二个文字字符 'l'?
也就是说,为什么不能输出……?
l a t e <len=4, dist=4>
我尝试用我自己的 deflate 实现强制第二个版本,但 zlib 不会膨胀输出。我收到错误“放气数据无效或不完整”。
【问题讨论】:
标签: compression gzip zlib deflate data-compression