我试图用任何文件的byte []创建一个Huffman树然后压缩它。为了创建BitSequence,我创建一个字节的HashMap和相应的字符串值,该值等于其节点的路径。当手工完成它时,我得到的BitSequence长度远远超过我的程序推出的长度。这是我创建值的HashMap的代码,其中bytes是该节点的字节值:
public static HashMap<Byte, String> getPath(Node n)
{
HashMap<Byte, String> map = new HashMap<Byte, String>();
buildPath(n, "", map);
return map;
}
public static void buildPath(Node n, String s, HashMap<Byte, String> map) {
if(n != null)
{
if (n.left != null){
buildPath(n.left, s+"0", map);
}
if (n.right != null){
buildPath(n.right, s+"1", map);
}
if(n.left == null && n.right == null)
{
map.put(bytes, s);
return;
}
}
return;
}
然后我从文件中查看原始字节数组,并使用生成的HashMap将Huffman路径附加到我将使用Huffman树本身压缩的序列,以便稍后解码。我生成路径的方式是否有错误,或者我的问题可能存在于其他地方?
答案 0 :(得分:0)
我看到你的方法是静态的,所以我假设变量字节也是如此。这不会将字节值放入HashMap中,而是继续将null放在那里。摆脱静态,然后它应该正确地将字节值放入地图。您可以将其设为私有,并创建一个返回它的getByte()方法,或者您可以简单地将字节设为public并使用您正在使用的任何对象调用它。