2011-04-26 89 views
1

我想編碼每個文件的霍夫曼代碼。 我已經找到了每個符號的比特長度(它的霍夫曼碼)。在Java中的霍夫曼編碼

是否有可能在Java中將字符編碼到文件中:是否有任何現有的類可以一點一點讀寫文件,而不是最小維數的char?

回答

2

你真的不想寫一個位到一個文件,相信我。通常我們定義一個字節緩衝區,在內存中建立「文件」,並在完成所有工作後寫入完整的緩衝區。否則,它將永遠(幾乎)。

如果您需要快速的位矢量,那麼看看colt library。如果你想寫單個位而不是自己做所有的位移操作,這非常方便。

+0

只是看着那個位向量。他仍然需要獲得'byte []'的支持來寫入'ByteBuffer'。我錯過了什麼? – alphazero 2011-12-08 17:47:02

2

我確定那裏有霍夫曼班,但我不知道他們在哪裏。如果你想推出自己的,兩種方法來做這個春天立即思想。

首先是在內存中組裝我的位串,並使用掩碼和移位操作符,並將這些位累加到較大的數據對象(即整數或長整數)中,然後用標準流寫入文件。

第二個更有雄心的自包含的想法是編寫一個OutputStream的實現,該實現有一個寫入單個位的方法,然後這個OutputStream類將自己完成上述緩衝/移位/累加操作,並可能通過結果到第二個包裝的OutputStream。

4

您可以創建BitSet來存儲您的編碼,因爲您正在創建它,並且只需在完成後將字符串表示形式寫入文件即可。

1

嘗試在java中寫位向量來完成位表示法:它應該允許您設置/重置位流中的各個位。

比特流可以保存你的霍夫曼編碼。這是最好的方法,並且閃電也很快。

Huffmann sample analysis here