© beeboys/Shutterstock.com
Serialisierung in Java

Der Klotz am Bein


Ich hatte mir vorgenommen, in diesem Artikel über alle möglichen Themen für fortgeschrittene Java-Entwickler zu schreiben. Allerdings habe ich einige meiner Newsletterabonnenten um Feedback zum Abschnitt „Serialisierung“ gebeten, und die Reaktionen waren überwältigend. So sehr, dass ich die ganze Zeit nur über Serialisierung schreiben werde.

Vor vielen Jahren habe ich für eine Firma gearbeitet, die von ihrem Kunden gebeten worden ist, ein Back-up-System für ziemlich große Dateien zu entwerfen. Wir haben sofort etwas gebaut, das aus Treibern in Delphi, DAT-Bändern für die Hardware und natürlich Java bestand. Dieses Back-up-System haben wir dann fröhlich in Produktion gebracht, mit dem zufriedenen Strahlen getaner Arbeit, die pünktlich und den Kundenspezifikationen entsprechend erledigt wurde. Ein paar Monate lang genossen wir den Klang der Stille. Dann stellte der Kunde auf einmal eine seltsame Frage: „Ähm, wie stellen wir die Dateien von einem Back-up wieder her?“ „Oh“, sagte der Chefentwickler, „der Kunde hat nie nach einer Wiederherstellungsfunktion gefragt!“ Ich mache keinen Witz. Wir hatten eine Einbahnstraße in die Datenvergessenheit gebaut! Da sich der Chefentwickler schnell einen neuen Job gesucht hat, wurde ich damit beauftragt, die Funktionen zur Wiederherstellung zu entwickeln. Wir hatten serialisierte Java-Objekte auf die DAT-Bänder geschrieben. In der Zwischenzeit hatten sich aber die Klassenstrukturen geändert. Und so begann mein langes Abenteuer, die Serialisierung zu entschlüsseln.

Die Geschichte der Objektserialisierung

Bei einer kürzlich stattgefundenen Podiumsdiskussion wurden die Java-Architekten gefragt, was sie an Java am meisten bedauern. Die Serialisierung stand ziemlich hoch oben auf ihrer Liste. Serialisierung kam in Java 1.1 hinzu, um Objekte persistieren zu können. Es war dazu bestimmt, transitiv zu arbeiten. Wenn also ein Objekt auf ein anderes zeigt, werden beide Objekte persistiert. Die Serialisierung ist klug genug, um mit Zirkelbezügen umgehen zu können, ohne dass es zu einem StackOverflowError kommt. Mit der serialVersionUID können wir inkompatible Klassenänderungen feststellen, z. B. zwischen Java-Versionen. Warum sollten die Java-Architekten das Gefühl haben, dass dies einer ihrer größten Fehler war? In Java 8 wurde java.ioSerializable 5237-mal implementiert oder erweitert. Und jedes Mal, wenn eine dieser Klassen modifiziert wird, muss sie das gleiche serialisierbare Format beibehalten, da ansonsten bestehende Systeme z...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang