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

标签 java huffman-code

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

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

编辑:回顾我的代码后,我意识到我的树并不完全正确,我现在能够(我认为)将位字符串组合在一起以创建一个可以写入文件的字节数组(更新代码以反射(reflect)这一点)。对于我的测试用例,我正在阅读文本 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!");
    }
}

最佳答案

关于java - 如何将霍夫曼编码字符写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56533917/

相关文章:

algorithm - 对于霍夫曼代码,我应该避免以 0(零)开头的多位代码吗?

java - 如何使用java以位方式保存文件?

java - 从字符串加载二叉树(parent-left-right)

java - 当代理中包含脚本库时,xpage 调用 Java 代理失败

java - 在二叉搜索树中查找重复条目的策略

java - 在 cucumber 测试期间无法执行目标 org.apache.maven.plugins :maven-surefire-plugin:2. 19.1 :test,

java - Eclipse 显示未使用的导入错误,但所有导入都是必需的

c++ - 哈夫曼解码算法

java - 如何在控制台中显示霍夫曼树?

c++ - 如何快速解码霍夫曼码?