如何在java中压缩0和1的字符串

时间:2013-04-28 17:02:54

标签: java binary compression huffman-code

我现在正在做霍夫曼编码,我遇到了这条路。我已经做了很多事,但这一部分。我现在的主要问题是我不知道如何存储使用我的代码编码的二进制字符串0和1。我尝试正常写出来,但文件大小最终比我编码的原始文本文件大得多。有人可以给我任何关于我应该如何存储我的二进制字符串的想法,以便不会发生这种情况。

更新 我注意到当我尝试将它投射到一个字符并最终被打印出来时,很多字符都被识别出来并且当我这么做时

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.任何人都有任何建议我如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

当你存储二进制字符串时,就是String。更有效地存储它们的一种方法是将二进制字符串转换为整数,并使用它们将字符串存储为ASCII字符。

  1. 将字符串剪切成8个字符的短片(1个字节= 8位)
  2. 使用Integer.parseInt(piece, 2);将二进制文件转换为int
  3. 现在将整数转换为char
  4. 对二进制字符串的每一段重复此操作。
  5. 然后将chars加入字符串并将结果存储为纯文本文件。这应该导致文件比以前的二进制字符串文件小8倍。

    [编辑] 这是在各种情况下测试的解码代码。 http://pastebin.com/Tq3nKX8A 请根据需要使用它。