2016-04-09 5 views
0

ObjectOutputStreamを使用してファイルに移入されたツリーを書き込もうとしていますが、java.io.NotSerializableExceptionを取得しています。ここで カスタムのリンクリスト(ツリー)オブジェクトに対してJava Serializableインターフェイスを実装するにはどうすればよいですか?

// 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(); 
} 

は私のツリークラス

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; 
}} 

連載が動作しないのはなぜですか?

+0

通常、NotSerializableExceptionには、発生したクラスがシリアル化可能ではないことを示すメッセージが表示されます。あなたは完全なエラーメッセージを投稿できますか? –

答えて

1

HuffNodeは、あなたが私たちに示していない他のクラスの内部クラスです。

内部クラスのインスタンスは、その内部クラスのインスタンスを保持します。囲むクラスがSerializableでない場合、これにより内部クラスのインスタンスが直列化されなくなります。

HuffNodeは、おそらく静的ネストされたクラスである必要があります。

private static class HuffNode implements Comparable<HuffNode> , Serializable 
関連する問題