0

我现在正在做霍夫曼编码,我在路上遇到了这个颠簸。除了这一部分,我几乎完成了所有工作。我现在的主要问题是我不确定如何存储使用我的代码编码的 0 和 1 的二进制字符串。我尝试正常写出它,但它的文件大小最终比我编码的原始文本文件大得多。有人可以给我任何关于我应该如何存储我的二进制字符串的想法,这样就不会发生这种情况。

更新我注意到,当我尝试将其转换为 char 并最终打印为 ?s 时,很多 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。有人对我如何解决这个问题有任何建议吗?

4

1 回答 1

2

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

  1. 将字符串切成 8 个字符的短片段(1 字节 = 8 位)
  2. 用于Integer.parseInt(piece, 2);将二进制片段转换为int
  3. 现在将整数转换为char
  4. 对每一段二进制字符串重复此操作。

然后,您将其连接chars成一个字符串并将结果存储为纯文本文件。这应该会导致文件比之前的二进制字符串文件小 8 倍。

[编辑] 这是在各种情况下经过测试的工作 en 和解码代码。 http://pastebin.com/Tq3nKX8A 请随意使用。

于 2013-04-28T17:11:37.267 回答