GeeksforGeeks (Français)

la sérialisation est un mécanisme de conversion de l’état d’un objet en un flux d’octets. La désérialisation est le processus inverse où le flux d’octets est utilisé pour recréer l’objet Java réel en mémoire. Ce mécanisme est utilisé pour conserver l’objet.

Le flux d’octets est créé indépendant de la plateforme. Donc, l’objet sérialisé sur une plate-forme peut être désérialisé sur une autre plate-forme.,

pour rendre un objet Java sérialisable, nous implémentons l’interface java.io.Serializable.
La classe ObjectOutputStream contient la méthode writeObject () pour sérialiser un objet.

public final void writeObject(Object obj) throws IOException

La classe ObjectInputStream contient la méthode readObject() pour désérialiser un objet.

public final Object readObject() throws IOException, ClassNotFoundException

les Avantages de la Sérialisation
1. Pour enregistrer/persistance de l’état d’un objet.
2. Pour voyager un objet à travers un réseau.

seuls les objets de ces classes peuvent être sérialisés qui implémentent l’interface java.io.Serializable.,
Serializable est une interface de marqueur (n’a pas de membre de données et de méthode). Il est utilisé pour” marquer  » les classes java afin que les objets de ces classes puissent obtenir certaines capacités. D’autres exemples d’interfaces de marqueur sont: – clonable et distant.

Points à retenir
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 le processus de sérialisation.,Donc, 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.
exemple:

class A implements Serializable{// B also implements Serializable// interface.B ob=new B(); }

SerialVersionUID
le runtime de sérialisation associe un numéro de version à chaque classe sérialisable appelée SerialVersionUID, qui est utilisé lors de la désérialisation pour vérifier que l’expéditeur et le destinataire d’un objet sérialisé ont chargé des classes pour cet objet qui sont compatibles, 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é.

serialver
Le serialver est un outil fourni avec JDK. Il est utilisé pour obtenir le numéro serialVersionUID pour les classes Java.,
Vous pouvez exécuter la commande suivante pour obtenir serialVersionUID

serialver

Exemple 1:



la Sortie :

Object has been serializedObject has been deserialized a = 1b = geeksforgeeks

Exemple 2:



Résultat:

Object has been serializedData before Deserialization.name = abage = 20a = 2b = 1000Object has been deserializedData after Deserialization.name = abage = 20a = 0b = 2000

Description pour la Sortie:
Vous avez vu lors de la désérialisation de l’objet les valeurs de a et b a changé. La raison étant a était marquée comme transitoire et b était statique.,
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.

Cet article est rédigé par Mehak Narang et Shubham Juneja., Si vous aimez GeeksforGeeks et souhaitez contribuer, vous pouvez également écrire un article en utilisant contribute.geeksforgeeks.org ou envoyez votre article à [email protected]. voir votre article apparaissant sur la page principale GeeksforGeeks et aider les autres Geeks.
Veuillez écrire des commentaires si vous trouvez quelque chose d’incorrect, ou si vous souhaitez partager plus d’informations sur le sujet discuté ci-dessus.

attention lecteur! N’arrêtez pas d’apprendre maintenant., Obtenez tous les concepts de base et de Collections Java importants avec le cours Fundamentals of Java et Java Collections à un prix adapté aux étudiants et devenez prêt pour l’industrie.

balises D’Article:

Java
balises de pratique :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *