2016-04-09 3 views
0

Ich versuche, einen bevölkerten Baum in Datei mit ObjectOutputStream zu schreiben, aber ich bekomme java.io.NotSerializableException.Wie implementiere ich eine serialisierbare Java-Schnittstelle für ein benutzerdefiniertes Linked-List (Tree) -Objekt?

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

Hier ist mein Baum Klasse

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

Warum die Serialisierung nicht funktioniert?

+0

Normalerweise NotSerializableException kommt mit einer Nachricht, die Ihnen sagt, welche Klasse es nicht serialisierbar war. Können Sie die vollständige Fehlermeldung posten? –

Antwort

1

HuffNode ist eine innere Klasse einer anderen Klasse, die Sie uns nicht gezeigt haben.

Eine Instanz einer inneren Klasse gilt für eine Instanz der einschließenden Klasse. Wenn die umschließende Klasse nicht Serializable ist, verhindert dies, dass eine Instanz der inneren Klasse serialisiert wird.

HuffNode sollte wahrscheinlich eine statische geschachtelte Klasse sein.

private static class HuffNode implements Comparable<HuffNode> , Serializable 
Verwandte Themen