Das Deserialisieren erfolgt mit Hilfe der Klasse ObjectInputStream. Dieser muss bei der Kon¬struk¬tion ein InputStream übergeben werden. Analog zum ObjectOutputStream gibt es Me¬tho¬den zum Lesen der primitiven Datentypen und die Methode readObject zum Wieder¬herstellen eines serialisierten Objekts.
public boolean readBoolean() java.io.ObjectInputStream
public byte readByte()
public short readShort()
public char readChar()
public int readInt()
public long readLong()
public float readFloat()
public double readDouble()
public String readUTF()
public final Object readObject()
throws OptionalDataException,
throws ClassNotFoundException,
Alle diese Methoden können eine IOException zurückliefern.
Das Deserialisieren eines Objekts kann man sich vereinfacht in zwei Schritten vorstellen:
. Als erstes wird ein neues Objekt des zu deserialisierenden Typs angelegt und die Member¬variablen werden mit Standardwerten belegt. Weiters wird der Default Konstruk¬tor der ersten nicht serialisierbaren Superklasse aufgerufen.
. Nun werden die Daten eingelesen und diese werden dem neu erstellten Objekt zugewiesen. Jetzt hat das Objekt dieselbe Struktur und denselben Zustand wie das Objekt vor dem Seriali¬sieren. Ausgenommen sind natürlich statische und transiente Variablen.
Beim Deserialisieren von Objekten müssen einige Bedingungen erfüllt sein:
. Das nächste Element des Eingabestreams ist ein Objekt und kein primitiver Typ.
. Das Einlesen aus der Datei muss fehlerfrei funktionieren.
. Das eingelesene Objekt muss eine Konvertierung auf den erwünschten Typ zulassen sonst wird eine Exception ausgelöst.
. Der Bytecode der benötigten Klasse muss dem Empfängerprogramm bekannt sein, da dieser nicht mitgespeichert wird.
. Die Klasseninformation des deserialisierten Objekts und der Bytecode des Empfänger¬objekts müssen kompatibel sein. Dieses Problem wird im nächsten Kapitel näher behandelt.
|