selon Wikipedia, la sérialisation (ou sérialisation) est le processus de traduction de structures de données ou d’état d’objet dans un format qui peut être stocké (par exemple, dans un fichier ou un tampon mémoire) ou transmis (par exemple, via un lien de connexion réseau) et reconstruit ultérieurement (éventuellement dans un environnement informatique différent).Lorsque la série de bits résultante est relue selon le format de sérialisation, elle peut être utilisée pour créer un clone sémantiquement identique de l’objet d’origine.,
donc, fondamentalement, la Sérialisation est un processus de conversion d’un objet dans une séquence d’octets qui peuvent être conservées sur un disque ou une base de données ou peuvent être envoyées par des flux. Le processus inverse de création d’objet à partir d’une séquence d’octets est appelé désérialisation.
la Sérialisation et la Désérialisation en java
Pour sérialiser et désérialiser notre objet dans un fichier, nous devons appeler ObjectOutputStream.writeObject()
et ObjectInputStream.readObject()
.,
Une classe doit implémenter L’interface sérialisable présente dans le packagejava.io
afin de sérialiser son objet avec succès. Serializable est une interface de marqueur qui ajoute un comportement sérialisable à la classe qui l’implémente.
Java fournit Serializable API encapsulé sous java.io
le paquet pour la sérialisation et la désérialisation des objets qui comprennent,
java.io.serializable
java.io.Externalizable
ObjectInputStream
- et
ObjectOutputStream
etc.,
rappel
1. Si une classe parente a implémenté une interface sérialisable, la classe enfant n’a pas besoin de l’implémenter mais vice-versa n’est pas vraie.
2. Seuls les membres de données non statiques sont enregistrés via le processus de sérialisation.
3. Les membres de données statiques et les membres de données transitoires ne sont pas enregistrés via la sérialisation process.So, si vous ne voulez pas enregistrer la valeur d’un membre de données non statique, rendez-le transitoire.
4., Constructeur de l’objet n’est jamais appelée lorsqu’un objet est désérialisé.
5. Les objets associés doivent implémenter une interface sérialisable.
SerialVersionUID
le runtime de sérialisation associe un numéro de version à chaque classe sérialisable appelée SerialVersionUID, qui est utilisé pendant la désérialisation pour vérifier que l’expéditeur et le récepteur d’un objet sérialisé ont chargé des classes pour cet objet qui sont compatibles en ce qui concerne la sérialisation., Si le récepteur a chargé une classe pour l’objet qui a un UID différent de celui de la classe de l’expéditeur correspondant, la désérialisation entraînera une InvalidClassException. Une classe sérialisable peut déclarer explicitement son propre UID en déclarant un nom de champ.
il doit être statique, final et de type long.
j’.,e-ANY-ACCESS-MODIFIER static final long serialVersionUID=42L;
Si une classe sérialisable ne déclare pas explicitement un serialVersionUID, alors le runtime de sérialisation calculera un par défaut pour cette classe en fonction de divers aspects de la classe, comme décrit dans la spécification de sérialisation D’objet Java. Cependant, il est fortement recommandé que toutes les classes sérialisables déclarent explicitement la valeur serialVersionUID, car son calcul est très sensible aux détails de classe qui peuvent varier en fonction des implémentations du compilateur, tout changement de classe ou l’utilisation d’id différent peut affecter les données sérialisées.,
Il est également recommandé d’utiliser un modificateur privé pour UID car il n’est pas utile en tant que membre hérité.
en cas de variables transitoires:- une variable définie avec le mot-clé transient n’est pas sérialisée pendant le processus de sérialisation.Cette variable sera initialisée avec la valeur par défaut lors de la désérialisation. (par exemple: pour les objets, il est null, pour int, il est 0).
En cas de Variables statiques: – une variable définie avec le mot-clé static n’est pas sérialisée pendant le processus de sérialisation.Cette variable sera chargée avec la valeur actuelle définie dans la classe lors de la désérialisation.,
sérialisation en java
désérialisation
le champ de Contact est null car,il a été marqué comme statique et comme nous l’avons discuté précédemment, les champs statiques ne sont pas sérialisés.
remarque: les membres statiques ne sont jamais sérialisés car ils sont connectés à la classe et non à l’objet de la classe.
- la sérialisation est le processus de sauvegarde de l’état d’un objet en une séquence d’octets qui peuvent ensuite être stockés dans un fichier ou envoyés sur le réseau et la désérialisation est le processus de reconstruction d’un objet à partir de ces octets.,
- seules les sous-classes de l’interface
Serializable
peuvent être sérialisées. - Si notre classe n’implémente pas de
Serializable
interface ou si elle est d’avoir une référence à un nonSerializable
de classe puis de la JVM va lancerNotSerializableException
. - Tous les
transient
etstatic
champs de ne pas être sérialisé. - Le
serialVersionUID
est utilisé pour vérifier que les objets sérialisés et désérialisés ont les mêmes attributs et sont donc compatibles avec la désérialisation., - nous devrions créer un champ
serialVersionUID
dans notre classe, donc si nous changeons notre structure de classe (Ajout/Suppression de champs), la JVM ne passera pas parInvalidClassException
. Si nous ne le fournissons PAS, JVM en fournit un qui pourrait changer lorsque notre structure de classe change. - nous pouvons remplacer le comportement de sérialisation par défaut dans notre classe Java en fournissant l’implémentation des méthodes
writeObject
etreadObject
., - Et on peut l’appeler
ObjectOutputStream.defaultWriteObject()
etObjectInputStream.defaultReadObject
à partir dewriteObject
etreadObject
méthodes pour obtenir la valeur par défaut de la sérialisation et la désérialisation de la logique. - Nous pouvons jeter
NotSerializableException
exceptionwriteObject
etreadObject
, si nous ne voulons pas que notre classe à sérialiser ou désérialiser.
Leave a Reply