2016-06-28 120 views
-2

我正在創建一個基本的霍夫曼編碼/解碼工具。我發現this這個問題幫助我實現了一個頭文件,它以二進制形式存儲我生成的哈夫曼樹。我也可以使用樹來將文本編碼/解碼爲二進制文件。所以程序確實有效,但我仍然有問題。區分二進制頭和編碼二進制在霍夫曼

目前,頭文件和編碼二進制文件都在單獨的文件中,因爲我無法找到一種方法將它們放入同一個文件中,使得我在解碼過程開始時輕鬆讀取頭文件。在某些「頭部尾部」字符中進行硬編碼看起來像是一種相當冒險的方式來做到這一點,更不用說可能會將頭尾字符的某些起始位作爲頭部編碼樹的一部分讀入,導致整個樹被破壞。

雖然我的程序使用單獨的頭文件和正文文件,但我想合併它們。關於如何做到這一點的任何想法?

回答

1

您不需要做任何特殊的事情來合併您的標題(樹)和內容(Huffman編碼的文本)。

如果你看看你發佈的問題中的答案,here,並檢查解碼算法(ReadNode(BitReader reader)僞代碼函數那裏),你可以看到算法停止閱讀樹,只是因爲它讀取所有 - 不是因爲它達到了EOF字符或類似的東西。

它不需要搜索EOF,因爲它僅針對有子級(0位)的節點遞歸調用自身。一旦算法達到所有葉子,就不會有更多的遞歸調用,因此讀者將被準確定位在正確的位置,讓您開始閱讀內容(在讀完整個標題之後,沒有額外的「標題結尾」適應證。