二进制的霍夫曼代码(java)?
Huffman code in binary(java)?
我已经成功构建了我的霍夫曼树,我有一个方法可以遍历树并将每个字符的霍夫曼代码保存为 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,它将每个字符映射到它的 Huffman 代码。
但是,将霍夫曼编码保存为字符串只会增加编码文件的大小而不是压缩它,因为您需要一个由 0 和 1 组成的字符串来表示单个字符。那么有没有办法将代码保存为二进制位而不是字符串?提前致谢。
不要使用 String
来存储二进制结果,请使用 java.util.BitSet
。
它完全符合您的要求,允许您按索引位置设置各个位。
当您准备好提取二进制值时,您可以使用 toByteArray()
。
我已经成功构建了我的霍夫曼树,我有一个方法可以遍历树并将每个字符的霍夫曼代码保存为 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,它将每个字符映射到它的 Huffman 代码。
但是,将霍夫曼编码保存为字符串只会增加编码文件的大小而不是压缩它,因为您需要一个由 0 和 1 组成的字符串来表示单个字符。那么有没有办法将代码保存为二进制位而不是字符串?提前致谢。
不要使用 String
来存储二进制结果,请使用 java.util.BitSet
。
它完全符合您的要求,允许您按索引位置设置各个位。
当您准备好提取二进制值时,您可以使用 toByteArray()
。