[Java Edition] Geschichte der Serialisierung

Was ist serialVersionUID?

Die Laufzeitserialisierung weist allen Serialisierungsklassen eine Versionsnummer zu. Es ist serialVersionUID.

Es führt Authentifizierungen wie Konsistenzprüfungen durch, wenn eine serialisierte Klasse deserialisiert wird. Wenn die "serialVersionUID" der deserialisierten Klasse und die Klasse im Klassenladeprogramm unterschiedlich sind, Der Deserialisierungsprozess löst eine "InvalidClassException" -Ausnahme aus.

Serialisierbare Klassen können ihre eigene "serialVersionUID" definieren. Das Feld "serialVersionUID" muss jedoch statisch, lang oder endgültig sein. Beispiel:

private static final long serialVersionUID = 42L;

Wenn eine serialisierbare Klasse das Feld "serialVersionUID" nicht explizit definiert, erfolgt dies aus der Laufzeitserialisierung Der Wert von "serialVersionUID" wird automatisch durch Berechnung basierend auf der Struktur der Klasse wie den Feldern und Methoden der Klasse generiert.

Es wird jedoch dringend empfohlen, dass alle serialisierbaren Klassen explizit "serialVersionUID" deklarieren. Der Grund dafür ist, dass die Berechnungsmethode von "serialVersionUID" von der Struktur der Klasse (die Berechnung scheint lange zu dauern) und des Java-Compilers abhängt. Bei der Deserialisierungszeit können unerwartete "InvalidClassExceptions" -Ausnahmen auftreten.

Aus diesem Grund legt die Klasse explizit "serialVersionUID" fest, um dieselbe "serialVersionUID" in verschiedenen Java-Compilerumgebungen zu gewährleisten. Sollte deklariert werden.   Wir empfehlen außerdem dringend, den privaten Modifikator in der explizitesten "serialVersionUID" -Deklaration zu verwenden.

The serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization. If the receiver has loaded a class for the object that has a different serialVersionUID than that of the corresponding sender's class, then deserialization will result in an InvalidClassException. A serializable class can declare its own serialVersionUID explicitly by declaring a field named serialVersionUID that must be static, final, and of type long: ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L; If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible.

Recommended Posts

[Java Edition] Geschichte der Serialisierung
Die Geschichte des Schreibens von Java in Emacs
Die Geschichte des einfachen String-Vergleichs in Java
Die Geschichte eines gewöhnlichen Othello in Java
[Java] Zugriff auf die signierte URL von s3 (signierte Version 2)
Die Geschichte des Lernens von Java in der ersten Programmierung
Probieren Sie Progate Free Edition [Java II]
Probieren Sie Progate Free Edition [Java I]
[Java] Überprüfen Sie die JDK-Version der erstellten Kriegsdatei
Die Geschichte von dto, dao-like mit Java, SQLite
[Java] Löschen Sie die Elemente von List
Java-Serialisierung
Überprüfen Sie die Version von Cent OS
20190803_Java & k8s on Azure Die Geschichte vom Festivalbesuch
Die Geschichte von Java Gold SE8
Die Geschichte von @ViewScoped, die Speicher verschlingt
Die Geschichte, Java mithilfe der BitBucket-Pipeline nach Heroku zu bringen
Der Ursprung von Java-Lambda-Ausdrücken
Die Geschichte des Erstellens einer Java-Version des Minecraft-Servers mit GCP (und dem Festlegen einer weißen Liste)
Wechseln Sie die von SDKMAN installierte Java-Version, wenn Sie Verzeichnisse verschieben
Die Geschichte, das Verhalten von String durch Passieren von Java nicht zu kennen
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
Ist die von Ihnen verwendete Version von Elasticsearch mit Java 11 kompatibel?
Die Geschichte der Begegnung mit Spring Custom Annotation
Holen Sie sich das Ergebnis von POST in Java
Geschichte von paiza.jp [Java Standard Input Solution]
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers
Untersuchen Sie die Speichernutzung von Java-Elementen
[Java] Ermittelt den Tag eines bestimmten Tages
Anmerkung: [Java] Überprüfen Sie den Inhalt des Verzeichnisses
Die Geschichte der Aktualisierung des Docker-Containers von Sonar Qube
Installation des OMC APM Agent --JAVA Edition-
Vergleichen Sie Elemente eines Arrays (Java)
Die Geschichte von RxJava, das unter NoSuchElementException leidet
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
Was sind die aktualisierten Funktionen von Java 13
Messen Sie einfach die Größe von Java-Objekten
Rückblick auf die Grundlagen von Java
Ausgabe des Buches "Einführung in Java"
Die Geschichte von Java SE11 Silber erhalten
Überprüfen Sie die Version der Standard-Web-Software.
[Java] Überprüfen Sie die Anzahl der Zeichen
[Java] [Spring] Testen Sie das Verhalten des Loggers
Statische Java-Geschichte
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Die Geschichte eines Game Launcher mit automatischer Ladefunktion [Java]
Java-Versionsprüfung
Die Geschichte des Erwerbs von Java Silver in zwei Monaten von völlig unerfahrenen.
So finden Sie heraus, welche Java-Version der Klassendatei kompiliert wurde
Hinweise zur Java-Serialisierung
[Java] Übersicht über Java
Die Geschichte des Java-Initialisierers
Java generische Geschichte
In Bezug auf transiente Modifikatoren und Serialisierung in Java
Überprüfen Sie die installierte und aktivierte JDK-Version
[Java] Behandlung von Java Beans in der Methodenkette
JAVA: jar, aar, zeige den Inhalt der Datei an