我一直在學習RFC1951和「puff.c」,並有一個關於「不完整長度」的問題問題。DEFLATE(RFC1951)動態霍夫曼「不完整長度的」
作爲鄰近我所知,限定了「動態」霍夫曼碼錶,其允許比HLIT指定+ 257會產生一個錯誤,至少由puff.c.多個代碼例如,如果作爲簡單的調試測試,我將使用所有9位代碼的Huffman表來定義僅257個點亮/透鏡,則會產生錯誤'puff.c'。這是結果有目的還是錯誤?我能否假設基於'zlib'庫的任何「充氣機」都會產生相同的錯誤?
我找不到在RFC 1951年的任何規範,應要求使用足夠緊密的霍夫曼碼。當然,我可以看到在壓縮方面使用「低訂閱」的霍夫曼表可能效率很低,但我不確定爲什麼應該禁止使用這樣的表。
我的興趣不只是假設。我真的希望使用一個訂閱不足的,只有文字的哈夫曼代碼(但不是上面引用的例子)來將一些應用程序特定的圖像壓縮成PNG文件。但我想確保它可以與任何PNG圖像查看器一起使用。
謝謝。我承認你關於規範的「措辭」的觀點並接受現實。但在所有應有的尊重,關於實用性,我沒有看到RAPID腐敗檢測的論點。使用完整的代碼,ANY組合的比特序列將產生看似有效的符號。錯誤檢測只發生在EOB過早或缺少錯誤的情況下,或者根據RFC1950的校驗和。另一方面,一個不完整的代碼可以實現快速的錯誤檢測:快速性與不完整性成正比。事實上,puff.c中有限的錯誤檢測說明了我的觀點。 – codechimp
但是爲了獲得完整的代碼,動態頭必須滿足約束條件,這幾乎不會被隨機數據滿足。所以隨機輸入將在頭部被檢測到,並且你永遠不會得到代碼。更快。 –