Ich habe eine Knotenstruktur aus Node-Objekten erstellt. Sie sind komplexer als der Code, den ich zeige, haben aber nur primitive oder serialisierbare Instanzmitglieder.Serialisierung speichert keine Objektdaten, nur Objektreferenzen
Angenommen jeder Knoten kann bis zu 10 Kinder haben, sieht der Code ein bisschen so aus.
public class Node implements Serializable{
private static final long serialVersionUID = -848926218090221003L;
private Node _parent;
private boolean _hasParent;
private Node[] _children;
private int _childCount = 0;
public Node(Node parent){
_children = new Node[10];
_parent = parent;
_hasParent = (parent != null);
}
...
//Various accessors etc
}
Jetzt ist dieser Baum recht teuer zu bauen, aber sobald es fertig ist, schreibe ich es in eine Datei:
ObjectOutputStream serializedOuput = new ObjectOutputStream(new FileOutputStream(cacheFile));
serializedOuput.writeObject(tree);
serializedOuput.close();
Wenn ich den Baum fertig bin Cachen ich einige irreversable Änderungen ab mögen Trimmen nicht benötigte Zweige.
Wenn ich als nächstes einen Basisbaum brauche, um zu arbeiten, erstelle ich ein neues Baumobjekt, indem ich meine serialisierte Datei einlese.
Das Problem ...
Erstellen scheinen den Baum aus der Datei ein neues Objekt zu einfach zu erstellen, die auf den alten Punkte. Mit anderen Worten, die Änderungen, die nach dem Schreiben in die Datei vorgenommen wurden, wurden auch für den neuen Baum vorgenommen.
Wenn ich die App neu starte und versuche, in der serialisierten Datei zu lesen, wird null zurückgegeben.
Also ich scheinen Serialisierung Objektreferenzen eher als das Objekt selbst, irgendwelche Ideen, wo ich falsch liege?
Das lässt mich denken, dass es etwas anderes ist, das dies verursacht. Ich muss tiefer graben, danke. –