我正在尝试读取文件的内容,然后使用霍夫曼编码将它们写入另一个文件。因此,我创建了一个霍夫曼树,每个节点包含字符,字符频率以及代表频率的二进制字符串。我无法理解的是将霍夫曼编码的字符写入文件。
我尝试将二进制字符串写入文件,但意识到它只是在写入字符串,而不是实际的编码数据。因此,我然后将二进制字符串转换为字节,并将字节写入文件,但这只会给我一个与原始文件大小相同的空白文件。在实际写入文件时,我感觉好像丢失了一些东西。
编辑:回顾一下我的代码后,我意识到我的Tree并不完全正确,我现在能够(我认为)将位字符串组合在一起以构成一个字节数组,可以将其写入文件(更新代码以反映这一点)。对于我的测试用例,我正在阅读文本AAA_BB_C
,但是当我查看文件时,输出为<0x1e>
。我不确定这是什么意思。我期望原始文件的输出相同,只是尺寸较小。
public static void writeFile(HuffTree tree) {
String bin = ""; // String of entire binary code
int spot = 0; // Spot in array
byte[] bytes = new byte[256]; // byte array
try {
FloatileWriter writer = new FileWriter("test(encoded).txt");
// Gets Binary String of each Character in the file
for(int i = 0; i < fileText.length(); i++) {
bin += tree.findDataBinary(fileText.charAt(i));
}
// Takes each bit and adds to byte array
System.out.println(bin);
while(bin.length() > 7) {
String temp = bin.substring(0, 7);
bin = bin.substring(7, bin.length());
bytes[spot] = Byte.parseByte(temp, 2);
spot++;
}
// Writes bytes to file
for(int i = 0; i <= spot; i++) {
writer.write(bytes[i]);
}
writer.close();
} catch(IOException e) {
System.out.println("IOException!");
}
}
答案 0 :(得分:0)