如何将霍夫曼编码的字符写入文件?

时间:2019-06-10 21:44:43

标签: java huffman-code

我正在尝试读取文件的内容,然后使用霍夫曼编码将它们写入另一个文件。因此,我创建了一个霍夫曼树,每个节点包含字符,字符频率以及代表频率的二进制字符串。我无法理解的是将霍夫曼编码的字符写入文件。

我尝试将二进制字符串写入文件,但意识到它只是在写入字符串,而不是实际的编码数据。因此,我然后将二进制字符串转换为字节,并将字节写入文件,但这只会给我一个与原始文件大小相同的空白文件。在实际写入文件时,我感觉好像丢失了一些东西。

编辑:回顾一下我的代码后,我意识到我的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!");
    }
}