【问题标题】:How to compress a string of 0s and 1s in java如何在java中压缩一串0和1
【发布时间】:2013-04-28 17:02:54
【问题描述】:

我现在正在做 Huffman Coding,但我在路上遇到了这个颠簸。除了这一部分,我几乎完成了所有工作。我现在的主要问题是我不确定如何存储使用我的代码编码的 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。有人对我如何解决这个问题有任何建议吗?

【问题讨论】:

  • 为什么不将 0 和 1 存储为二进制而不是文本的 0 和 1?如果你想进一步压缩这些,你可以使用内置压缩,它也使用霍夫曼编码和算术编码

标签: java binary compression huffman-code


【解决方案1】:

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

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

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

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

【讨论】:

  • 这个输出还是一样的字符串吗?
  • 输出不会是同一个字符串,而是一个 ASCII 字符的字符串,可以按照相反的说明轻松解码。即,将 char 转换为 int,转换 int 二进制并将 0 和 1 串在一起。您可以将其与 Huffman 解码算法一起使用。
  • 我不想要求太多,但有什么方法可以提供示例代码。如果你有时间的话。
  • 我在此处生成了一些用于二进制 -> 字符串转换的示例代码:PasteBin Link 您应该能够自行反转该过程。 ( 非常相似,只是你应该使用Integer.toBinaryString(n) 将 int 转换为二进制。
  • 我不确定如何将字符转换回整数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多