如何为自定义链表(树)对象实现 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
我正在尝试使用 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