2016-04-22 74 views
0

現在我正在研究使用霍夫曼編碼進行文本壓縮的項目。我能夠讀入一個文件(包含ASCII文本)並創建一個霍夫曼編碼信息。例如,如果我的文件"input.txt"包含以下文本: Missippi river,那麼我的編碼代碼字將是這樣的 1110100110111001001010000110101111001110其中有40位,而我的"input.txt"是14個字節(14 * 8 = 112位)。所以我減少了112位到40位,但是如何將我的代碼字(包含O和1)輸出到只有40位長的文件?我試圖把這個字符串放入一個.txt.文件,但是這個.txt.文件最終比我的"input.txt"長,從而使我的整個項目變得毫無價值。我正在嘗試創建一個編碼器/解碼器模型。我已經成功地創建了編碼器部分,並且我也能夠創建霍夫曼碼字,但是如何輸出這些信息以便我的解碼器可以讀取並解壓縮。如何使用java保存文件位?

感謝

+0

爲什麼要將位存儲爲字符串? – m0skit0

+0

我從樹上得到它,所以使用一個字符串似乎很容易。後來我使用BitSet將其轉換爲int。 – theprogrammer094

回答

2

而不是0和1的字符串,你可以使用一個java BitSet存儲1/0的布爾位,然後當你寫它,你會使用toByteArray直接寫字節作爲一個二進制文件,而不是寫一串文本。

+0

我實際上使用了一個BitSet和我的序列化的BitSet對象,它的結果比我的實際輸入更大。 'toByteArray'會相同嗎? – theprogrammer094

+0

@ rohitkrishna094不,序列化是爲了稍微不同的目的而設計的(存儲數據使其可以自動回到對象)。如果直接寫字節,效率會更高(因爲只是存儲字節,而不是BitSet的內部參數/狀態) – hexafraction

+0

噢。謝謝,但你能給我一個鏈接或一個小的代碼片段,解釋字節數組是如何工作的。 – theprogrammer094