[Édition Java] Histoire de la sérialisation

Qu'est-ce que serialVersionUID

La sérialisation à l'exécution attribue un numéro de version à toutes les classes de sérialisation. C'est serialVersionUID.

Il effectue une authentification telle que des vérifications de cohérence lors de la désérialisation d'une classe sérialisée. Si le serialVersionUID de la classe désérialisée et la classe dans le chargeur de classe sont différents, Le processus de désérialisation déclenche une exception ʻInvalidClassException`.

Les classes sérialisables peuvent définir leur propre serialVersionUID. Cependant, le champ serialVersionUID doit être statique, long ou final. Exemple:

private static final long serialVersionUID = 42L;

Si une classe sérialisable ne définit pas explicitement le champ serialVersionUID, alors à partir de la sérialisation d'exécution La valeur de serialVersionUID est automatiquement générée par un calcul basé sur la structure de la classe telle que les champs et les méthodes de la classe.

Néanmoins, il est fortement recommandé que toutes les classes sérialisables déclarent explicitement serialVersionUID. La raison en est que la méthode de calcul de serialVersionUID dépend de la structure de la classe (le calcul semble prendre beaucoup de temps) et du compilateur Java. Des exceptions ʻInvalidClassExceptions` inattendues peuvent se produire lors de la désérialisation.

C'est pourquoi la classe définit explicitement serialVersionUID pour garantir le même serialVersionUID dans différents environnements de compilateur Java. Doit être déclaré.   Nous vous recommandons également fortement d'utiliser le modificateur private dans la déclaration la plus explicite serialVersionUID.

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

[Édition Java] Histoire de la sérialisation
L'histoire de l'écriture de Java dans Emacs
L'histoire de la comparaison de chaînes de bas niveau en Java
L'histoire de la fabrication d'un Othello ordinaire à Java
[Java] Accéder à l'URL signée de s3 (version signée 2)
L'histoire de l'apprentissage de Java dans la première programmation
Essayez Progate Free Edition [Java II]
Essayez Progate Free Edition [Java I]
[Java] Vérifiez la version JDK du fichier war construit
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
[Java] Supprimer les éléments de la liste
Sérialisation Java
Vérifiez la version de Cent OS
20190803_Java & k8s sur Azure L'histoire d'aller au festival
Histoire du passage de Java Gold SE8
L'histoire de @ViewScoped dévore la mémoire
L'histoire de la transmission de Java à Heroku à l'aide du pipeline BitBucket
L'origine des expressions Java lambda
L'histoire de la création d'une version Java du serveur Minecraft avec GCP (et également de la création d'une liste blanche)
Changer la version de java installée par SDKMAN lors du déplacement de répertoires
L'histoire de ne pas connaître le comportement de String en passant par Java
Une histoire sur l'utilisation de l'API League Of Legends avec JAVA
La version d'Elasticsearch que vous utilisez est-elle compatible avec Java 11?
L'histoire de la rencontre avec l'annotation personnalisée Spring
Obtenez le résultat de POST en Java
Histoire de paiza.jp [solution d'entrée standard Java]
Vérifiez le contenu du magasin de certificats Java
Examiner l'utilisation de la mémoire des éléments Java
[Java] Obtenez le jour d'un jour spécifique
Mémo: [Java] Vérifiez le contenu du répertoire
L'histoire de la mise à jour du Docker Container de Sonar Qube
Installation de l'agent OMC APM --JAVA Edition-
Comparer les éléments d'un tableau (Java)
L'histoire de RxJava souffrant de NoSuchElementException
[jour: 5] J'ai résumé les bases de Java
Quelles sont les fonctionnalités mises à jour de Java 13
Mesurez facilement la taille des objets Java
Retour sur les bases de Java
Sortie du livre "Introduction à Java"
L'histoire reçue par Java SE11 silver
Vérifiez la version du logiciel Web standard.
[Java] Vérifiez le nombre d'occurrences de caractères
[Java] [Spring] Tester le comportement de l'enregistreur
Histoire statique Java
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
L'histoire de la création d'un lanceur de jeu avec une fonction de chargement automatique [Java]
Vérification de la version Java
L'histoire de l'acquisition de Java Silver en deux mois de totalement inexpérimenté.
Comment savoir quelle version Java d'un fichier de classe a été compilée
Notes de sérialisation Java
[Java] Présentation de Java
L'histoire de l'initialiseur Java
Histoire générique Java
Concernant les modificateurs transitoires et la sérialisation en Java
Vérifiez la version de JDK installée et la version de JDK activée
[Java] Gestion des Java Beans dans la chaîne de méthodes
JAVA: jar, aar, affichez le contenu du fichier