Um die Bedeutung des Feldes serialVersionUID zu verstehen, sollte man wissen, wie Serialisierung/Desialisierung funktioniert.
Wenn ein Objekt einer serialisierbaren Klasse serialisiert wird, assoziiert Java Runtime eine serielle Versionsnummer (genannt serialVersionUID) mit diesem serialisierten Objekt. Wenn Sie dieses serialisierte Objekt deserialisieren, gleicht Java Runtime die serialVersionUID des serialisierten Objekts mit der serialVersionUID der Klasse ab. Nur wenn beide übereinstimmen, wird mit dem weiteren Prozess der Deserialisierung fortgefahren, andernfalls wird eine InvalidClassException geworfen.
Daraus folgt, dass die serialVersionUID des serialisierten Objekts mit der serialVersionUID der Klasse übereinstimmen muss, damit der Serialisierungs-/Desialisierungsprozess erfolgreich ist. Wenn der Programmierer den serialVersionUID-Wert explizit im Programm angibt, wird derselbe Wert mit dem serialisierten Objekt und der Klasse assoziiert, unabhängig von der Serialisierungs- und Deserialisierungsplattform (z.B. kann die Serialisierung auf einer Plattform wie Windows unter Verwendung von Sun oder MS JVM und die Deserialisierung auf einer anderen Plattform wie Linux unter Verwendung von Zing JVM durchgeführt werden).
Aber wenn serialVersionUID nicht vom Programmierer angegeben wird, dann wird bei der Serialisierung \DeSerialization eines beliebigen Objekts zu berechnen, verwendet die Java-Laufzeitumgebung ihren eigenen Algorithmus, um sie zu berechnen. Dieser Algorithmus zur Berechnung der serialVersionUID variiert von einer JRE zur anderen. Es ist auch möglich, dass die Umgebung, in der das Objekt serialisiert wird, eine JRE verwendet (z.B. SUN JVM) und die Umgebung, in der die Deserialisierung stattfindet, eine Linux Jvm(zing) verwendet. In solchen Fällen unterscheidet sich die serialVersionUID, die dem serialisierten Objekt zugeordnet ist, von der serialVersionUID der Klasse, die in der Deserialisierungsumgebung berechnet wurde. Die Deserialisierung wird dann nicht erfolgreich sein. Um solche Situationen/Probleme zu vermeiden, muss der Programmierer also immer die serialVersionUID der serialisierbaren Klasse angeben.
7 Stimmen
Finden Sie eine gute Praxis über serialversionUID; dzone.com/articles/what-is-serialversionuid