„Hallo Amigo! Ich möchte dem, was Ellie dir erzählt hat, noch etwas hinzufügen.“

Manchmal musst du den Serialisierungsprozess steuern. Hier sind einige Gründe dafür:

1) Ein Objekt ist nicht bereit für die Serialisierung: sein aktueller interner Status ist im Begriff, sich zu ändern.

2) Ein Objekt enthält nicht serialisierbare Objekte, kann sie aber in eine Form umwandeln, die sich leicht serialisieren lässt, z.B. als Byte-Array oder etwas anderes speichern.

3) Ein Objekt möchte alle seine Daten als eine Einheit deserialisieren und/oder vor der Serialisierung verschlüsseln.

Es kann viele Gründe geben, die Serialisierung manuell durchzuführen. Aber wir wollen dennoch nicht alle Vorteile verlieren, welche uns die Standard-Serialisierung bietet. Schließlich könnte unser Objekt andere Objekte verwenden. Aber die können nicht serialisiert werden, wenn unser Objekt die Serialisierung nicht unterstützt.

Auch für diese Situation gibt es eine Lösung: das Externalizable-Interface. Wir müssen den visionären Schöpfern von Java danken. Ersetze einfach das Serializable-Interface durch das Externalizable-Interface und schon kann deine Klasse den Serialisierungsprozess manuell verwalten.

Das Externalizable-Interface hat zwei Methoden, die das Serializable-Interface nicht besitzt, die von der Java-Maschine aufgerufen werden, wenn ein Objekt serialisiert wird. Das sieht dann so aus:“

Code
class Cat implements Externalizable
{
 public String name;
 public int age;
 public int weight;

 public void writeExternal(ObjectOutput out)
 {
  out.writeObject(name);
  out.writeInt(age);
  out.writeInt(weight);
}

 public void readExternal(ObjectInput in)
 {
  name = (String) in.readObject();
  age = in.readInt();
  weight = in.readInt();
 }
}

Erinnert dich das an etwas?

„Heiliger Strohsack! Genau so haben wir versucht, Objekte zu speichern, bevor wir die Serialisierung betrachtet hatten.“

„Das macht alles total einfach: Wenn die Standard-Serialisierung ausreicht, erben wir einfach vom Serializable-Interface. Wenn sie nicht passt, dann erben wir von Externalizable und schreiben unseren eigenen Code, um unser Objekt zu speichern/zu laden.“

„Aber gilt eine mit Externalizable markierte Klasse als serialisierbar? Können wir eine solche Klasse verwenden, um Referenzen auf unsere serialisierbaren Klassen ‚sicher‘ zu speichern?“

„Ja. Wenn eine Klasse Serializable oder Externalizable implementiert, wird sie als serialisierbar betrachtet.“

„Das ist die perfekte Lösung. Das gefällt mir.“

„Ich freue mich, das zu hören. Aber das war noch nicht alles... Du solltest Professor Hans nach allen Feinheiten fragen. Es gibt da bestimmt einige. Er wollte dirn etwas zum Lesen geben.“