Java serialisierte Objekte öffnen

maltor

Mitglied
Hallo,
Ich speicher in meinen Programm „Objekte“ in einer Datei. Die Objekte implementieren alle das Interface Serializable und haben die serialVersionUID = 1L.
Das Programm habe ich mit Java 1.6.0_01 übersetzt und Die Daten (Objekte) gespeichert.

Nun ist die neue Java Version 1.6.0_05 erschienen. Diese habe ich nun in Eclipse eingebunden und das Programm neu übersetzt. Anschließend habe ich das Programm gestartet und versucht die gespeicherte Datei zu laden. Dieses missglückte, java hat eine Exception ausgegeben. An dem Programm habe ich nichts geändert.

Kann man diesen Machanismus von java umgehen? Denn es ist ja nicht so toll wenn ich meine alten Dateien mit einer neuen Java Version nicht mehr öffnen kann.

Gruß
Malte Basse
 
Da du keine Fehlermeldung gepostet hast, ist das folgende nur Vermutung:
Ich gehe davon aus, dass es nicht an der neuen Java-Version liegt, sondern daran dass du deine Klassen neu kompiliert hast. Soweit ich mich erinnern kann, führt das Ändern der serialisierbaren Klassen dazu, dass serialisierte Objekte nicht mehr eingebunden werden können. Durch die Vorgabe der Serial-Id war ich bisher der Meinung, dass dieses Problem nicht auftauchen würde - aber wie gesagt, ohne Fehlermeldung kann man da wenig zu sagen.
 
Die Fehlermeldung:

java.io.InvalidClassException: javax.swing.JComponent; local class incompatible: stream classdesc serialVersionUID = -2514362798440941654, local class serialVersionUID = -1030230214076481435
 
Naja, und hast du schon mal probiert, die erwartete SerialVersionId aus der Fehlermeldung zu kopieren und in deiner Klasse einzufügen? ?
 
Nein, ich weiß leider noch nicht von welcher Klasse der Fehler kommt, da ich sehr viele Klassen speicher. Ich habe das gerade ausprobiert nun ein Klasse zu speichern und das hat ohne Problem geklappt. In dieser habe ich auch die private static final long serialVersionUID = 1L; verwendet. Die gespeicherte Datei könnte ich Probelmelos öffnen (nach der neuen übersetzung).



Laut der Fehlermeldung java.io.InvalidClassException: javax.swing.JComponent müsste die Klasse bei der die Exception auftrat von Type JComponent sein. Nun denke ich mal das ich da wohl die serialVersionUID = 1L vergessen habe. Die Klasse habe ich noch nicht gefunden.
 
Ich habe das gerade ausprobiert nun ein Klasse zu speichern und das hat ohne Problem geklappt.

Das ist auch kein Wunder - die ID ändert sich ja nur, wenn sich auch die Klasse verändert. Das heißt, wenn du jetzt mit einer Klasse was speicherst und dann die Klasse nicht veränderst und wieder einliest, dann muss da alles in Ordnung sein.

Soweit ich weiß, steht die ID ja auch in der serialisierten Datei.
Schau doch mal mit ner Desktop-Suche nach, in welchem serialisierten Objekt die ID vorkommt.
 
Zurück