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

如何在java中压缩0和1的字符串,java,binary,compression,huffman-code,Java,Binary,Compression,Huffman Code,我现在正在做哈夫曼编码,我在路上遇到了这个颠簸。除了这一部分,我几乎什么都做了。我现在的主要问题是我不知道如何存储使用我的代码编码的0和1的二进制字符串。我试着正常地把它写出来,但它的文件大小最终比我编码的原始文本文件大得多。有人能告诉我如何存储二进制字符串以避免这种情况发生吗 更新 我注意到,当我试图将很多字符转换为字符时,它们都无法被识别,最终被打印为?s,当我这样做时 String u = scanner.nextLine(); char l; for(int b = 0;

我现在正在做哈夫曼编码,我在路上遇到了这个颠簸。除了这一部分,我几乎什么都做了。我现在的主要问题是我不知道如何存储使用我的代码编码的0和1的二进制字符串。我试着正常地把它写出来,但它的文件大小最终比我编码的原始文本文件大得多。有人能告诉我如何存储二进制字符串以避免这种情况发生吗

更新 我注意到,当我试图将很多字符转换为字符时,它们都无法被识别,最终被打印为?s,当我这样做时

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);
String u=scanner.nextLine();
查尔l;

对于(int b=0;b当您存储二进制字符串时,就是一个
string
。更有效地存储它们的一种方法是将二进制字符串转换为整数,并使用这些整数将字符串存储为ASCII字符

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

    [编辑] 这是在各种情况下测试过的工作和解码代码。
    请按您认为合适的方式使用。

    为什么不将0和1存储为二进制而不是文本中的0和1?如果您想进一步压缩这些内容,可以使用内置压缩,它还使用哈夫曼编码和算术编码。输出是否仍然是相同的字符串?输出将不是相同的字符串,而是一个字符串一组ASCII字符,可以按照相反的指令轻松解码。例如,将字符转换为int,转换int二进制并将0和1串在一起。您可以将其与您的哈夫曼解码算法一起使用。我不想要求太多,但您是否有办法提供示例代码。如果您有时间,我可以我在这里为二进制->字符串转换生成了一些示例代码:您应该能够自己反转这个过程。(这非常类似,只是您应该使用
    Integer.toBinaryString(n)
    将整数转换为二进制。我不确定如何将字符转换回整数。