或者更准确地说,当两个相同的字符串相互连接时,为什么 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 不会膨胀输出。我收到错误“无效或不完整的放气数据”。