【发布时间】:2021-10-10 13:44:32
【问题描述】:
我主要获得 RFC 1951,但是我不太清楚如何管理(使用动态霍夫曼表时)不需要或不存在距离代码的情况。例如,让我们输入:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890987654321ZYXWVUTSR
因为没有长度 >= 3 的重复,所以不可能有反向引用。 根据 RFC 1951,无论如何都必须存在至少一个距离代码,否则将无法对 HDIST - 1 进行编码。根据参考资料,我理解这样的代码应该是零位以表示“没有距离代码” ”。
一个零位的距离码表示没有距离码 完全使用(数据都是文字)。
在 infgen 符号中,我希望看到 dist 0 0。
分析 gzip 对 infgen 的作用,但是,我看到为上述输入发出了两个距离代码(每个 1 位长)(即使当时没有实际使用):
! infgen 2.4 output
!
gzip
!
last
dynamic
litlen 48 6
litlen 49 6
litlen 50 6
...cut...
litlen 121 6
litlen 122 6
litlen 256 6
dist 0 1
dist 1 1
literal 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890987654321Z
literal 'YXWVUTSR
end
!
crc
length
那么在这些情况下正确的行为是什么?
【问题讨论】:
标签: gzip huffman-code deflate