我正在尝试使用huffman算法在java中编写文本压缩程序。我已经创建了编码代码,我从cmd运行我的程序,如下所示:java main inputFile outputFile其中input是包含4的txt文件专栏:
Hello
My name is
Panagiotis123
Nice to meet you!
我逐行读取了txt,我想创建一个压缩的输出文件,其中包含编码的文本:
111000110110100000100011011110001110100110100010100001000111111110011110100101010001011110111111101110101111110011101110011000111001001111001011000111010101101100001001001010011110101011110000111001
输入文件包含45个字符,输出文件包含195个BITS 所以第一个文件大约是45个字节,输出文件是195/8 ...... 我试过这个:
int b;
while ((line2 = br2.readLine()) != null) {
String a = Encode.encode(line2, hTree);
for(int k = 0; k < a.length(); k++) {
b = a.charAt(k);
fos.write((byte)b);
}
}
其中a是包含编码行的String。 fos是这样创建的
FileOutputStream fos = new FileOutputStream(new File(args[1]));
输入文件最终是54个字节,outputFile 198 ... 显然它需要195 0/1作为字符而不是位...
答案 0 :(得分:2)
试试这个,添加一些零,直到你有8位的块,然后逐字节解析并写
int b;
while ((line2 = br2.readLine()) != null) {
String a = Encode.encode(line2, hTree);
while (a.length() % 8 != 0)
a += "0"; // lets add some extra bits until we have full bytes
for (int i = 0; i < a.length(); i += 8) {
String byteString = a.substring(i, i + 8); // grab a byte
int parsedByte = 0xFF & Integer.parseInt(byteString, 2);
fos.write(parsedByte); // write a byte
}
}