1663 Stimmen

Warum gibt es in Java transiente Felder?

Warum hat Java transient Felder?

18voto

DragonFax Punkte 4275

Auch andere Serialisierungssysteme als das native Java-System können diesen Modifikator verwenden. Hibernate, zum Beispiel, wird keine Felder persistieren, die entweder mit @Transient oder die transient Modifikator. Auch Terrakotta respektiert diesen Modifikator.

Ich glaube, der Modifikator bedeutet im übertragenen Sinne: "Dieses Feld ist nur für die speicherinterne Verwendung bestimmt. Es ist nicht portierbar", d.h. man kann sich nicht auf seinen Wert in einem anderen VM-Speicherbereich verlassen. Ähnlich wie flüchtig bedeutet, dass man sich nicht auf bestimmte Speicher- und Thread-Semantiken verlassen kann.

17voto

Andrei Ciobanu Punkte 12134

transient wird verwendet, um anzuzeigen, dass ein Klassenfeld nicht serialisiert werden muss. Das wahrscheinlich beste Beispiel ist ein Thread Bereich. Normalerweise gibt es keinen Grund für die Serialisierung eines Thread da sein Zustand sehr "flussspezifisch" ist.

9voto

Bevor ich diese Frage beantworte, muss ich die Serialisierung erklären, denn wenn Sie verstehen, was Serialisierung in der Computerwissenschaft bedeutet, können Sie dieses Schlüsselwort leicht verstehen.

Wenn ein Objekt über das Netzwerk übertragen / auf einem physischen Medium (Datei,...) gespeichert wird, muss das Objekt "serialisiert" werden. Bei der Serialisierung werden Objektreihen in Bytes umgewandelt. Diese Bytes werden über das Netzwerk gesendet/gespeichert und das Objekt wird aus diesen Bytes neu erstellt.

Exemple :

public class Foo implements Serializable 
{
 private String attr1;
 private String attr2;
 ...
}

Wenn es nun ein Feld in dieser Klasse gibt, das Sie nicht übertragen oder speichern möchten, können Sie die Funktion transient Stichwort

private transient attr2;

Dadurch wird verhindert, dass die Feldform bei der Serialisierung der Klasse einbezogen wird.

7voto

Silfverstrom Punkte 26486

Weil nicht alle Variablen serialisierbar sind

5voto

setzamora Punkte 3420

Sie wird benötigt, wenn Sie einige sensible Daten, die mit der Serialisierung einhergehen, nicht weitergeben wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X