Serialisierungsproblem

Kababär

Top Contributor
Hi,

mir fällt da gerade etwas ein wegen dem Serialisieren, als ich mein Programm etwas erweitert habe.. und zwar:
Derzeit serialisiere ich das Objekt "Modul". Eine Liste von Modulen wird beim Programmstart deserialisiert und in einer TableView angezeigt. Jetzt habe ich allerdings noch ein weiteres Attribut dem Objekt Modul hinzugefügt und somit lässt es sich nicht mehr deserialisieren.
Heißt ich müsste ja jetzt das serialisierte Objekt auf der Festplatte löschen (?), aber dann wären ja die Daten weg. Weniger problematisch ist es bei meiner Konfig-Datei, da, falls es Probleme gibt diese zu laden, einfach eine "Default-Konfig-Datei" mit Standardwerten erstellt wird.

Wie kann ich also diese Daten "retten" falls ich mal auf die Idee komme: "Hey, das Attribut wäre auch nicht verkehrt!"?

Modul implementiert "Externalizable" und readExternal bzw writeExternal wurden überschrieben (einfach getter/setter in den ObjectInput/ObjectOutput gesetzt).

Jemand eine Idee?
 

AndyJ

Bekanntes Mitglied
Das geaenderte Object ist nicht mehr kompatibel mit der vorherigen Version, weil die Versionsnummer eine andere ist. Ausser du hast eine angegeben:

private static final long serialVersionUID = 84356L;

Wenn dieses Feld fehlt, generiert Java eine Versiosnnummer einfach aus dem Quellcode. Wenn sich der aendert, ist auch die Nummer eine andere und die Objekte sind nicht mehr kompatibel.

Es gibt aber auch andere Moeglichkeiten, Daten zu serialisieren, z.B. JAXB, JSON oder JABB (https://github.com/a-genius/jabb). Letzteres habe ich fuer ein Projekt geschrieben, wo staendige Aenderungen der Objekte normal sind und genau dein Problem auftrat.

Andy
 

Kababär

Top Contributor
Die UID bleibt die gleiche, allerdings sagt er, dass die Versionen nicht übereinstimmen..
JAXB habe ich schon implementiert (als Notlösung, man muss vorher erst das XML exportieren).

Dazu hatte ich auch die Idee noch JSON zu verwenden, aber bin da noch totaler Neuling.
Das Schreiben klappt aber soweit. Ich packe dazu alle Module in ein JSONArray und schreibe das dann.
Nur die Formatierung kriege ich nicht so hin, alles steht in einer Zeile in der Datei.
(Aber das ist nicht tragisch soweit der Code funktioniert :D)
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben