java - 二进制(java)中的霍夫曼代码?

标签 java huffman-code

我已经成功构建了我的霍夫曼树,并且我有一个方法可以遍历树并将每个字符的霍夫曼代码保存为由 1 和 0 组成的字符串:

    public void encode(HuffmanNode node, String aux) {

    if (!node.isLeaf()) {
        if (node.getLeft() != null) {
            aux = aux + "0";
            encode(node.getLeft(), aux);
        }
        if (node.getRight() != null){
            aux = aux + "1";
            encode(node.getRight(), aux);
        }
    } else {
        //building a character-code pair and add to keyMap
        keyMap.put(new Character(node.getCh()), aux);
    }
}

其中 keyMap 是一个 HashMap,它将每个字符映射到其霍夫曼代码。

但是,将霍夫曼代码保存为字符串只会增加编码文件的大小,而不是压缩它,因为您需要一个由 0 和 1 组成的字符串来表示单个字符。那么有没有办法将代码保存为二进制位而不是字符串呢?提前谢谢。

最佳答案

不要使用String来存储二进制结果,请使用java.util.BitSet

它完全符合您的要求,允许您按索引位置设置各个位。

当您准备好提取二进制值时,可以使用toByteArray()

关于java - 二进制(java)中的霍夫曼代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50939749/

相关文章:

java - 如何从 Drools 列表中获取最大最小项目

python - 如何为霍夫曼编码和解码创建一棵树?

c++ - 读取和霍夫曼压缩 4 字节二进制字符串 STD C++ Linux 环境

java - Android 服务在一段时间后停止广播进度

java - 数组中的 LocalDate 给我空结果

c++ - 将位写入c++文件

c++ - 函数不接受 auto_ptr 的迭代器

java - 打印霍夫曼频率表

java - Kotlin 问题 “One type argument expected for class ExpandableRecyclerAdapter”

java - 从 SVN 存储库中删除一个空的 Java 包