Java 哈夫曼解码EOF字符命中空点异常
嗨,我正在解码一个使用哈夫曼编码压缩的文件。我们使用Java 哈夫曼解码EOF字符命中空点异常,java,project,decoding,compression,huffman-code,Java,Project,Decoding,Compression,Huffman Code,嗨,我正在解码一个使用哈夫曼编码压缩的文件。我们使用EOF字符来表示我们已经完成了解压缩。每当我为一个EOF字符编码时,我就会点击一个NullPointerException。当我不包括对它的检查时,它可以正常工作,但我最终使用EOF字符。我不明白我是如何得到NullPointerException的,我非常感谢任何能提供帮助的人。多谢各位 public static void decompress(String in, String out) { try {
EOF
字符来表示我们已经完成了解压缩。每当我为一个EOF
字符编码时,我就会点击一个NullPointerException
。当我不包括对它的检查时,它可以正常工作,但我最终使用EOF
字符。我不明白我是如何得到NullPointerException
的,我非常感谢任何能提供帮助的人。多谢各位
public static void decompress(String in, String out)
{
try
{
String result = "";
BinaryNode<Character> pointer = huffTree;
ArrayList<Character> a = new ArrayList<Character>();
File outFile = new File(out);
FileOutputStream decompressedFile = new FileOutputStream(outFile);
for(char c : decodings.toString().toCharArray())
{
if(c == '0')
{
pointer = pointer.getLeft();
}
else if(c == '1')
{
pointer = pointer.getRight();
}
if(pointer.isLeaf())
{
if(pointer.getElement() == '^')
{
return;
}
decompressedFile.write(pointer.getElement());
pointer = huffTree;
}
}
decompressedFile.close();
}
catch(Exception e)
{
System.err.println("Error");
e.printStackTrace();
}
}
publicstaticvoid解压(串入、串出)
{
尝试
{
字符串结果=”;
BinaryNode指针=huffTree;
ArrayList a=新的ArrayList();
文件输出文件=新文件(输出);
FileOutputStream decompressedFile=新的FileOutputStream(输出文件);
for(char c:decodings.toString().toCharArray())
{
如果(c=='0')
{
pointer=pointer.getLeft();
}
else如果(c=='1')
{
指针=pointer.getRight();
}
if(指针.isLeaf())
{
if(pointer.getElement()=='^')
{
返回;
}
解压缩file.write(pointer.getElement());
指针=huffTree;
}
}
解压缩file.close();
}
捕获(例外e)
{
System.err.println(“错误”);
e、 printStackTrace();
}
}
空指针异常发生在哪里?(根据堆栈跟踪)在带有if(pointer.getElement()=='^')
什么是BinaryNode的行上?我只是猜测,但我认为pointer.getElement()='^'
是多余的,因为只有当pointer.getElement()!='^'时,您才在该块中代码>。另外,如果没有pointer.getElemnt()
返回null
是否存在问题?哎呀,是的,你是对的。没有指针。getElement()!=“^”代码>我没有得到NullPointerException
但是它仍然没有忽略EOF字符…你在哪里检查EOF?