Was ist diese serialVersionUID in Java 5?

Status
Nicht offen für weitere Antworten.

Math55

Bekanntes Mitglied
hi, ich frage mich, was diese zeile hier wohl bedeuet. ist ein feature aus tiger....

Code:
private static final long serialVersionUID = 1L;

danke🙂
 
ist nur im Zusammenhang mit Serialisierung von Bedeutung, der Einser ist wahrscheinlich ein Fehler...

wo hastn das her, das hat nix mit dem Tiger zu tun

lies die API Doc zu serializable
 
serialVersionUID wird bei der Deserialisierung benutzt, um die Version eines Objekts festzustellen und ob die Klasse zu diesem paßt. Solange du die Eigenschaften einer Klasse nicht änderst, muß die serialVersionUID auch nicht geändert werden.

Der Wert der serialVersionUID ist egal. Kann inkrementell bei 1 oder 0 anfangen, ein zufällige erzeugte Zahl oder eine per serialver-Tool erzeugte Zahl. Wichtig ist nur, daß sie geändert werden muß, sobald du Eigenschaften der Klasse änderst.
 
kleine info noch die stammt nicht ausm tiger(5) sonder die war schon immer da
man muß sie nicht angeben man kann as machen wenn man das nicht macht wird glaube automatisch eine erzeugt
 
So egal ist sie gar nicht:
serialVersionUID denotes the version number of a serialized Java class. All serialized Java classes with the same serial Version UID and name are considered to be compatible, even if the actual Java classes from which they originated are different.

This can easily happen when you serialize one version of a class, change its structure (add a field, for example), then serialize some more instances. Without a serial Version UID field, Java would refuse to load the older version into the newer class with the additional field. With the serial Version UID field, Java will still load the older version into the new class, but will set the value of the new field to 0, null, or false, as appropriate to its data type.
 
Das Passt jetzt vielleicht nicht so zu dem Thema, aber ich will nicht extra ein neues aufmachen:

Wenn es diese "Seriennummer" für eine Klasse gibt, die sicherstellen soll, dass das Objekt aus den ankommenden Daten auch wieder fehlerfrei rekonstruiert werden kann, heißt das, dass es - jetzt kommt die Frage *g - nur die Eigenschaften der Instantz, nicht jedoch der Bauplan des Objekts selbst, übertragen werden?

Danke!
 
[Java ist auch eine Insel hat gesagt.:
]Bei der Serialisierung wird in Java nicht nur der Objektinhalt geschrieben, sondern zusätzlich noch eine eindeutige Kennung der Klasse, die UID. Die UID ist ein Hashcode aus Namen, Attributen, Parametern, Sichtbarkeit und so weiter. Sie wird als long wie ein Attribut gespeichert. Ändert sich der Aufbau einer Klasse, ändert sich der Hashcode und damit die UID. Klassen mit unterschiedlicher UID sind nicht kompatibel. Erkennt der Lesemechanismus in einem Datenstrom eine UID, die nicht zu der Klasse passt, wird eine InvalidClassException ausgelöst. Das bedeutet, dass schon ein einfaches Zufügen von Attributen zu einem Fehler führt.
 
Die serialisierte Klasse lässt sich wiederherstellen, wenn die alten Eigenschaften in die neue Version noch vorhanden sind, deswegen, wer die Daten gerne serialisiert, sollte unbedingt UID festlegen, denn die gelösche(umbenannte) Eigenschaften kann man notfalls wieder nachträglich einfügen.
Methoden und neue Eigenschaften bei wiederherstellung sind nicht weiter tragisch.
Ich persönlich schreibe (in Persist.Klassen) immer eine UID.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben