Das Schlüsselwort transient wird in Java verwendet, um anzugeben, dass ein bestimmtes Feld einer Klasse nicht serialisiert werden soll. Bei der Serialisierung wird der Zustand eines Objekts in einen Bytestrom umgewandelt, der dann wieder in eine Kopie des Objekts zurückverwandelt werden kann. Felder, die als transient markiert sind, werden bei diesem Vorgang übersprungen.
Verwendung
Das Schlüsselwort transient wird in Szenarien verwendet, in denen bestimmte Teile des Zustands eines Objekts nicht gespeichert oder übertragen werden sollen, z. B. sensible Informationen, temporäre Daten oder Daten, die leicht neu berechnet werden können.
Syntax
classClassNameimplementsSerializable{private transient dataType variableName;}Bereitgestellt von
dataType: Der Datentyp der Variablen.
variableName: Der Name der Variable, die als transient markiert werden soll.
Beispiele
Beispiel 1: Grundlegende Verwendung
import java.io.*;classUserimplementsSerializable{private String username;private transient String password;publicUser(String username, String password){this.username = username;this.password = password;}
@Override
public String toString(){return"Username: "+ username +", Password: "+ password;}}publicclassTransientExample{publicstaticvoidmain(String[] args){
User user =newUser("john_doe","secret123");try(ObjectOutputStream oos =newObjectOutputStream(newFileOutputStream("user.ser"));
ObjectInputStream ois =newObjectInputStream(newFileInputStream("user.ser"))){
oos.writeObject(user);
User deserializedUser =(User) ois.readObject();
System.out.println("Deserialized User: "+ deserializedUser);}catch(IOException | ClassNotFoundException e){
e.printStackTrace();}}}Bereitgestellt von
In diesem Beispiel implementiert die Klasse UserSerializable , und das Feld password ist als transient markiert. Wenn das Objekt User serialisiert und dann deserialisiert wird, wird das Feld password nicht wiederhergestellt, was die Wirkung des Schlüsselworts transient verdeutlicht.
In diesem Beispiel hat die Klasse Session ein Feld transientlastAccessTime . Nach der Serialisierung und Deserialisierung wird die lastAccessTime nicht wiederhergestellt und ihr Standardwert (0) wird gedruckt.
Tipps und bewährte Praktiken
Sensible Daten: Verwende transient, um zu verhindern, dass sensible Daten (z. B. Passwörter, Kreditkartennummern) in Serie gehen.
Vorläufige Daten: Markiere Felder als transient, wenn sie temporäre Daten enthalten, die neu berechnet werden können oder nicht aufbewahrt werden sollen.
Standardwerte: Denke daran, dass die Felder von transient bei der Deserialisierung mit ihren Standardwerten initialisiert werden (z.B. 0 für numerische Typen, null für Objektreferenzen).
Benutzerdefinierte Serialisierung: Wenn du mehr Kontrolle über den Serialisierungsprozess brauchst, solltest du die Methoden writeObject und readObject implementieren.
Serialisierbare Schnittstelle: Stelle sicher, dass die Klasse die Schnittstelle Serializable implementiert; andernfalls hat das Schlüsselwort transient keine Wirkung.
Testen: Teste immer den Serialisierungs- und Deserialisierungsprozess, um zu überprüfen, ob die transient Felder wie erwartet behandelt werden.
Statische Felder: Beachte, dass statische Felder nicht serialisiert werden, da sie zur Klasse gehören und nicht zu einer bestimmten Instanz. Daher hat die Kennzeichnung als transient keine Wirkung.
Das Schlüsselwort
transientwird in Java verwendet, um anzugeben, dass ein bestimmtes Feld einer Klasse nicht serialisiert werden soll. Bei der Serialisierung wird der Zustand eines Objekts in einen Bytestrom umgewandelt, der dann wieder in eine Kopie des Objekts zurückverwandelt werden kann. Felder, die alstransientmarkiert sind, werden bei diesem Vorgang übersprungen.Verwendung
Das Schlüsselwort
transientwird in Szenarien verwendet, in denen bestimmte Teile des Zustands eines Objekts nicht gespeichert oder übertragen werden sollen, z. B. sensible Informationen, temporäre Daten oder Daten, die leicht neu berechnet werden können.Syntax
dataType: Der Datentyp der Variablen.variableName: Der Name der Variable, die alstransientmarkiert werden soll.Beispiele
Beispiel 1: Grundlegende Verwendung
In diesem Beispiel implementiert die Klasse
UserSerializable, und das Feldpasswordist alstransientmarkiert. Wenn das ObjektUserserialisiert und dann deserialisiert wird, wird das Feldpasswordnicht wiederhergestellt, was die Wirkung des Schlüsselwortstransientverdeutlicht.Beispiel 2: Transiente in einem komplexen Objekt
In diesem Beispiel hat die Klasse
Sessionein FeldtransientlastAccessTime. Nach der Serialisierung und Deserialisierung wird dielastAccessTimenicht wiederhergestellt und ihr Standardwert (0) wird gedruckt.Tipps und bewährte Praktiken
transient, um zu verhindern, dass sensible Daten (z. B. Passwörter, Kreditkartennummern) in Serie gehen.transient, wenn sie temporäre Daten enthalten, die neu berechnet werden können oder nicht aufbewahrt werden sollen.transientbei der Deserialisierung mit ihren Standardwerten initialisiert werden (z.B.0für numerische Typen,nullfür Objektreferenzen).writeObjectundreadObjectimplementieren.Serializableimplementiert; andernfalls hat das Schlüsselworttransientkeine Wirkung.transientFelder wie erwartet behandelt werden.transientkeine Wirkung.