2012-11-18 76 views
2

我正在使用一個靜態字典文件,其中包含一些單詞和值。這個值不是固定的大小,例如the1,love01,kill101等等。當我嘗試壓縮一組單詞時,如果該單詞的值存在,我遍歷每個單詞並查找字典。如果存在,我用值更改單詞,如果它不存在,我將單詞編碼爲字節。在壓縮之後,我得到了一大塊比特,並且由於這些字典值和未壓縮的字不是固定大小的,我不能對這些比特進行分組並對它們進行解碼。如何識別壓縮/解壓縮位組?

我曾考慮過爲每組位使用1位標誌來確定它是壓縮的還是未壓縮的,但由於未知長度的碼字或常規字,我無法檢測到標誌位。

如果我使用1個字節的分隔符,它仍然有問題。假設我的分隔符是00000000,並且在分隔符之前有100,分隔符之後我有001,所以我們有10000000000001,我該怎麼知道這些位是哪一組是我的分隔符? 我可以使用其他方法將這些壓縮/解壓縮位分組來解碼它們嗎?謝謝。

回答

0

首先,您打算部署這種語言和系統?許多語言都提供了自己的壓縮庫和工具,可以滿足您的需求,而不需要重大的低級設計任務。

這裏的答案是建立一些更嚴格的簿記和文件格式,以便能夠撤消壓縮。大多數壓縮系統的文件格式都有一定的開銷,這就是爲什麼當你壓縮兩次文件時,你不一定會保存任何內容,並且實際上可以增加文件的大小。

通常文件在文件開始時利用頭來提供關鍵信息。這將是定義特定於壓縮文件的任何規則的好地方。

  1. 創建僅在代碼字之間使用的固定大小分隔符。這可以在分析文件之後但在實際寫出壓縮數據之前確定。
  2. 如果您生成您的分隔符而不是固定的已知值,請將其作爲您的一個標題項目。
  3. 保持您的標題爲簡單的ascii格式,以便您可以使用標準工具(如sscanf和fscanf)輕鬆提取它。
  4. 如果你想有一個頭可以包含額外的信息,你可能需要一個一致的方式來告訴頭結束和數據的開始。包括「ENDHEADER」的效果應該足夠並且仍然容易識別。
+0

我應該爲特定項目開發這個功能,所以我不能使用任何庫或工具。關於固定大小的分隔符的問題在最後一段。 – gmnnn