Enthüllung transienter Felder in Java: Persistenzkontrolle verstehen
Serialisierung in Java beinhaltet die Konvertierung des Zustands eines Objekts in einen Bytestrom zur Speicherung, was Folgendes ermöglicht die Nachbildung des Objekts später. Es ist jedoch möglicherweise nicht wünschenswert, dass bestimmte Felder bestehen bleiben, was zur Einführung transienter Felder führt.
Transiente Felder: Eine Definition
Transiente Felder, gekennzeichnet durch „transient“. „ Schlüsselwort sind diejenigen, die nicht in den serialisierten Zustand des Objekts einbezogen werden sollten. Dies bedeutet, dass bei der Serialisierung eines Objekts seine transienten Felder übersprungen werden.
Zweck transienter Felder
Betrachten Sie das Beispiel einer GalleryImage-Klasse, die ein Bild speichert und ein Miniaturbild:
class GalleryImage implements Serializable { private Image image; private transient Image thumbnailImage; }
Das Miniaturbild wird vom Bild abgeleitet und sollte nicht neben dem Originalbild gespeichert werden. Wenn Sie es als transient markieren, wird seine Serialisierung verhindert. Dies optimiert den Speicherplatz und eliminiert die Möglichkeit von Serialisierungsfehlern.
Deserialisierung und transiente Felder
Bei der Deserialisierung wird der Zustand des Objekts auf den Zustand zum Zeitpunkt der Erstellung zurückgesetzt Serialisierung. Bei transienten Feldern erfolgt jedoch keine automatische Wiederherstellung. Beispielsweise ist in der GalleryImage-Klasse das ThumbnailImage nach der Deserialisierung immer noch null. Um dies zu umgehen, kann die readObject-Methode überschrieben werden, um das Miniaturbild programmgesteuert zu generieren:
private void readObject(ObjectInputStream inputStream) throws IOException, ClassNotFoundException { inputStream.defaultReadObject(); generateThumbnail(); }
Vorteile transienter Felder
Das obige ist der detaillierte Inhalt vonWie steuern transiente Felder die Persistenz bei der Java-Serialisierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!