In Java wird das transient
-Schlüsselwort verwendet, um anzugeben, dass ein bestimmtes Feld nicht serialisiert werden soll, wenn sich die Klasse in ein anderes Medium wie eine Datei oder über das Netzwerk an einen anderen Ort bewegt. Es ist ein Modifikator, der auf die Instanzvariablen einer Klasse angewendet werden kann.
"Serialisierung" ist der Prozess, bei dem der Zustand eines Objekts in einen Byte-Stream konvertiert wird. Dies ist nützlich, wenn Sie den Zustand eines Objekts speichern und später oder an einem anderen Ort wiederverwenden möchten. Jedoch gibt es Fälle, in denen Sie wollen, dass spezifische Felder nicht serialisiert werden. Das könnte der Fall sein, wenn sie vertrauliche Informationen wie Passwörter enthalten oder wenn sie nicht serialisierbare Objekte referenzieren.
Schauen wir uns ein einfaches Beispiel an:
class Benutzer implements Serializable {
String benutzerName;
transient String passwort;
}
In diesem Fall wird, wenn ein Benutzer
-Objekt serialisiert wird, das passwort
-Feld nicht in den resultierenden Byte-Stream aufgenommen, weil es als transient
markiert ist. Alle nicht-transienten Felder - in diesem Fall benutzerName
- würden normal serialisiert.
Das transient
-Schlüsselwort kann auch als Weg gesehen werden, bestimmte Felder als "temporär" zu kennzeichnen, die nicht Teil des dauerhaften Zustands der Klasse sind. Zum Beispiel, wenn ein Feld nur verwendet wird, um Berechnungen während der Laufzeit durchzuführen und nicht wirklich den aktuellen Zustand des Objekts darstellt, wäre es sinnvoll, dieses Feld als transient zu markieren.
Es ist wichtig anzumerken, dass transient
und volatile
zwei verschiedene Schlüsselwörter in Java sind und unterschiedliche Zwecke haben. Während transient
die Serialisierung beeinflusst, liegt der Zweck von volatile
in der Gewährleistung der Sichtbarkeit und Reihenfolge von Thread-Operationen auf einer Variable.
Als beste Praxis verwenden Sie das transient
-Schlüsselwort, wenn Sie nicht möchten, dass ein Feld während der Serialisierung gespeichert wird. Es ist ein leistungsstarkes Werkzeug, wenn es richtig verwendet wird, aber es sollte mit Bedacht verwendet werden, da es das Verhalten Ihrer Klassen in hohem Maße beeinflussen kann. Es ist auch erwähnenswert, dass transient
nur auf Instanzvariablen und nicht auf statischen oder finalen Feldern angewendet werden kann.