如何在java中压缩0和1的字符串
我现在正在做哈夫曼编码,我在路上遇到了这个颠簸。除了这一部分,我几乎什么都做了。我现在的主要问题是我不知道如何存储使用我的代码编码的0和1的二进制字符串。我试着正常地把它写出来,但它的文件大小最终比我编码的原始文本文件大得多。有人能告诉我如何存储二进制字符串以避免这种情况发生吗 更新 我注意到,当我试图将很多字符转换为字符时,它们都无法被识别,最终被打印为?s,当我这样做时如何在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;
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)
将整数转换为二进制。我不确定如何将字符转换回整数。