Fehler vermeiden: Serialisieren mit eigener Versionsnummer

Wenn beim Versuch, ein Objekt aus serialisierten Daten wiederherzustellen, die Versionsnummer der aktuellen Klasse nicht die richtige ist, dann wird der Ausnahmefehler InvalidClassException angezeigt. Der folgende Java-Tipp erklärt, wie sich diese Fehlermeldung einfach umgehen lässt.

Beim Serialisieren eines Objekts werden die Metadaten der Klasse zusammen mit dem Objektstatus weitergegeben. Diese Metadaten enthalten unter anderem auch die Versionsnummer der Klasse. Stimmt bei einer Datenwiederherstellung die Version der aktuellen Klasse nicht mit derjenigen in den serialisierten Daten überein, wird eine Fehlermeldung ausgelöst.

Klassen selbst versionieren

Diese Fehlermeldung lässt sich umgehen, indem der Programmierer die Versionierung seiner Klassen selbst übernimmt. Um eine Versionsnummer für eine Klasse bereitzustellen, sollte ein static final long-Klassenmitglied mit dem Namen serialVersionUID definiert werden. Beim Kompilieren wird dann der Wert dieses Mitglieds als Versionsnummer für die Klasse verwendet.

Steht für serialisierte Daten einer Klasse keine eigene Versionsnummer zur Verfügung, lässt sich mit Hilfe des Befehlszeilentools serialver die Versionsnummer der alten Klasse extrahieren. Wird dann die neue Klasse mit dieser Versionsnummer kompiliert, ist es möglich, die alten Daten mit der neuen Klasse zu deserialisieren.

Was muss man beachten?

Wer die Verantwortung für die Versionierung seiner Klassen selbst übernimmt, sollte ein gewisses Maß an Vorsicht walten lassen. Falls nach der Serialisierung der früheren Version die Klasse neue Attribute erhielt, dann werden diese Werte bei der Deserialisierung der Daten nicht initialisiert. Falls hingegen Eigenschaften fehlen, dann werden die Daten dieser Eigenschaften bei der Wiederherstellung der Instanz aus den serialisierten Daten ignoriert.

In beiden Fällen kommt es zu keiner Fehlermeldung. Somit bleibt es ungewiss, ob einige Eigenschaften eventuell nicht initialisiert beziehungsweise Daten ignoriert wurden. Es ist also zwar einfach und bequem, seine Java-Klassen selbst zu versionieren, doch es birgt auch einige Risiken.

Hier folgt eine Beispielklasse mit vom Programmierer bereitgestellter Versionierung und der Ausgabe des serialver-Tools:

ZDNet.de Redaktion

Recent Posts

Business GPT: Generative KI für den Unternehmenseinsatz

Nutzung einer unternehmenseigenen GPT-Umgebung für sicheren und datenschutzkonformen Zugriff.

3 Stunden ago

Alphabet übertrifft die Erwartungen im ersten Quartal

Der Umsatz steigt um 15 Prozent, der Nettogewinn um 57 Prozent. Im nachbörslichen Handel kassiert…

3 Tagen ago

Microsoft steigert Umsatz und Gewinn im dritten Fiskalquartal

Aus 61,9 Milliarden Dollar generiert das Unternehmen einen Nettoprofit von 21,9 Milliarden Dollar. Das größte…

3 Tagen ago

Digitalisierung! Aber wie?

Mehr Digitalisierung wird von den Unternehmen gefordert. Für KMU ist die Umsetzung jedoch nicht trivial,…

3 Tagen ago

Meta meldet Gewinnsprung im ersten Quartal

Der Nettoprofi wächst um 117 Prozent. Auch beim Umsatz erzielt die Facebook-Mutter ein deutliches Plus.…

4 Tagen ago

Maximieren Sie Kundenzufriedenheit mit strategischem, kundenorientiertem Marketing

Vom Standpunkt eines Verbrauchers aus betrachtet, stellt sich die Frage: Wie relevant und persönlich sind…

4 Tagen ago