Wissenswertes zur Serialisierung von Java-Objekten

In Java lässt sich aus jedem Objekt, für das ein Serializable Interface implementiert ist, eine Byte-Sequenz erstellen - und umgekehrt. Das Verfahren ist vom Betriebssystem unabhängig, ermöglicht also auch Wiederherstellung nach einem Netzwerktransfer.

Unter Serialisierung versteht man das automatische Speichern von Objekten, entweder auf ein Speichermedium wie Festplatte oder im Arbeitsspeicher. Mithilfe der Serialisierung kann problemlos eine so genannte Lightweight Persistence implementiert werden. Damit wird die Lebensdauer von Objekten über die der Anwendung hinaus verlängert.

Das Verfahren der Serialisierung wurde aus zwei Gründen zur Java-Sprache hinzugefügt:

  1. Das Javabeans-Verfahren verwendet die Serialisierung.
  2. Der Aufruf entfernter Methoden (RMI) ermöglicht eine automatische Verwendung von Objekten, die sich auf einem anderen Host im Netzwerk befinden, und zwar in der gleichen Weise wie bei lokalen Objekten.

Das Serializable Interface

Es ist möglich, jedes Objekt zu serialisieren, sofern es das Serializable Interface implementiert hat. Dieses Interface enthält keine Methoden, es ist lediglich ein Zeichen für den Compiler und die Java Virtual Machine (JVM), dass die jeweilige Klasse serialisierbar ist. Als das Serialisierungsverfahren zu der Sprache hinzugefügt wurde, änderte man viele Standard-Java-Klassen (alle Wrapper für primitive Typen wie Integer und Double, alle Container-Klassen und die Class-Klasse), so dass sie nun eine Serialisierung unterstützen.

Um ein Objekt zu serialisieren, ist ein Ausgabestrom (OutputStream) vonnöten, der in den speziellen Serialisierungsstrom namens ObjectOutputStream integriert werden muss. Danach ist lediglich die Methode writeObject() aufzurufen, um das Objekt zu serialisieren und an den Ausgangsstrom zu senden. Die Serialisierung eines Objekts lässt sich rückgängig machen, indem der InputStream in ObjectInputStream umgewandelt und dann die Methode readObject() aufgerufen wird. Wie gewohnt erhält der Programmierer dadurch einen Verweis auf einen Objekttyp, weshalb er auch einen Class-Cast durchführen muss, um ein Objekt des erforderlichen Typs zu erhalten.

Das Serialisierungsverfahren verarbeitet alle in dem Objekt enthaltenen Verweise korrekt. Alle verbundenen Objekte, zu denen aktive Verweise bestehen, werden ebenfalls serialisiert, was auch für alle verbundenen Objekte aller verbundenen Objekte gilt, und so weiter. Dieser Vorgang wird auch als Objektnetz bezeichnet. Listing A zeigt, wie die Serialisierung eines Objekts rückgängig gemacht werden kann.

Listing A



Ist ein ObjectOutputStream (basierend auf einem anderen Ausgangsstrom) erstellt worden, schreibt die Methode writeObject() ein Objekt in den Strom. Wichtig ist dabei, dass das String-Objekt in den Strom geschrieben wird, um anschließend problemlos deserialisiert zu werden. Die JVM erfasst nur die Länge eines Objekts, berücksichtigt jedoch nicht seine Größe und Struktur. Objekte können in jeden Strom geschrieben werden. Beispielsweise schreibt RMI ein Objekt in den Netzwerkstrom. Zu beachten ist, dass bei der Deserialisierung keine Methoden und auch keine Konstruktoren aufgerufen werden.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

ZDNet für mobile Geräte
ZDNet-App für Android herunterladen Lesen Sie ZDNet-Artikel in Google Currents ZDNet-App für iOS

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Wissenswertes zur Serialisierung von Java-Objekten

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *