如何为自定义链表(树)对象实现 Java 可序列化接口?

How do I implement Java Serializable interface for custom linkedlist(tree) object?

我正在尝试使用 ObjectOutputStream 将填充的树写入文件,但我得到 java.io.NotSerializableException

// build Huffman trie
HuffNode root = buildTrie(freq);

try{ 

    FileOutputStream saveFile=new FileOutputStream("SaveObj.sav");

    ObjectOutputStream save = new ObjectOutputStream(saveFile);
    save.writeObject(root);
    save.close(); 

} catch(Exception exc){
    exc.printStackTrace(); 
}

这是我的树class

private class HuffNode implements Comparable<HuffNode> , Serializable {
private final char ch;
private final int freq;
private final HuffNode left, right;

HuffNode(char ch, int freq, HuffNode left, HuffNode right) {
    this.ch    = ch;
    this.freq  = freq;
    this.left  = left;
    this.right = right;
}

// is the node a leaf node?
private boolean isLeaf() {
    assert ((left == null) && (right == null)) || ((left != null) && (right != null));
    return (left == null) && (right == null);
}

// compare, based on frequency
public int compareTo(HuffNode that) {
    return this.freq - that.freq;
}}

为什么序列化不起作用?

HuffNode 是其他一些 class 的内在 class,你还没有给我们看。

内部 class 的一个实例持有封闭 class 的一个实例。如果封闭的 class 不是 Serializable 这将阻止内部 class 的实例被序列化。

HuffNode 应该是静态嵌套 class.

private static class HuffNode implements Comparable<HuffNode> , Serializable