2013-04-28 86 views
0

我現在在做霍夫曼編碼,我在路上碰到了這個凹凸。我幾乎做了所有的事情,但這一部分。我現在的主要問題是我不知道如何存儲使用我的代碼編碼的0和1的二進制字符串。我試着把它寫出來,但最終的文件大小比我編碼的原始文件大得多。有人可以給我任何想法,我應該如何存儲我的二進制字符串,這樣就不會發生。如何在java中壓縮0和1的字符串

更新 我已經注意到,當我嘗試將其轉換爲一個char很多焦炭的不認可,最終被打印出來?的,當我做

String u = scanner.nextLine(); 
    char l; 
    for(int b = 0;b<u.length();b++) 
    { 
    l = u.charAt(b); 
    int c = (int) u.charAt(b); 
    String p = Integer.toBinaryString(c); 

    if(b!= u.length()-1) 
    { 
    while(p.length()!=8){ 
     p = "0" + p; 
    //Thread.sleep(3000); 
    } 
    }System.out.println(p); 
    k.append(p); 

它在讀取?並打印出00111111.任何人有任何建議我如何解決這個問題?

+3

爲什麼不把0和1的0和1存儲爲二進制而不是文本?如果你想進一步壓縮這些,你可以使用內置壓縮,也使用huffman編碼以及算術編碼。 – 2013-04-28 17:05:22

回答

2

當您存儲二進制字符串時,它只是一個String。一種更有效地存儲它們的方法是將二進制字符串轉換爲整數並使用它們將字符串存儲爲ASCII字符。

  1. 剪切串入短塊的8個字符的每個(1個字節= 8個比特)
  2. 使用Integer.parseInt(piece, 2);二進制片轉換爲int
  3. 現在轉換爲char
  4. 重複整數這爲二進制字符串的每一塊。

然後,您將chars合併爲一個字符串並將結果存儲爲純文本文件。這應該導致文件比您以前的二進制字符串文件小8倍。

[編輯] 這是工作和解碼已在各種情況下測試的代碼。 http://pastebin.com/Tq3nKX8A 請使用它,因爲你認爲合適。

+0

這樣的輸出仍然是相同的字符串嗎? – user2163684 2013-04-28 17:41:19

+0

輸出不會是相同的字符串,它將是一串ASCII字符,可以通過按照相反的指令輕鬆解碼。即將char轉換爲int,將int二進制和字符串轉換爲0和1。你可以使用你的霍夫曼解碼算法。 – 2013-04-28 18:41:53

+0

我不想問很多,但有什麼辦法可以提供示例代碼。如果你有時間的話。 – user2163684 2013-04-28 20:58:36