„Hallo Amigo! Ich möchte dir noch ein kleines Detail über die Serialisierung erzählen.“
Angenommen, unsere Klasse enthält eine Referenz auf einen InputStream. Dann kann sie nicht serialisiert werden, richtig?
„Richtig. Du hast selbst gesagt, dass Streams nicht serialisiert werden können. Und man kann ein Objekt nicht serialisieren, wenn es nicht serialisierbare Daten enthält.“
„Richtig. So ist es. Aber was ist, wenn die Klasse Daten speichert, die für ihren Status keine signifikante Rolle spielen und dennoch verhindert, dass die Klasse als serialisierbare Klasse betrachtet wird? Es ist egal, dass eine Klasse unnötige Dinge enthalten könnte. Sie könnte diese Daten jederzeit verwerfen, und vielleicht tut sie das sogar – ständig.“
Für diese Fälle haben die Entwickler von Java das Schlüsselwort transient erfunden. Wenn wir dieses Schlüsselwort vor eine Member-Variable schreiben, wird diese bei der Serialisierung ignoriert. Ihr Status wird nicht gespeichert oder rekonstruiert. Als ob es sie gar nicht gäbe. Das ist genau das Richtige für die Situationen, die wir uns gerade angesehen haben.
Erinnern sich ans Caching und den volatile-Modifikator? Es gibt keine Regeln ohne Ausnahmen.
Hier ist ein passendes Beispiel:
Ein „Cat“-Beispiel mit einer Variable, die für die Serialisierung unsichtbar ist:
class Cat implements Serializable
{
public String name;
public int age;
public int weight;
transient public InputStream in = System.in;
}
GO TO FULL VERSION