Maison  >  Article  >  Java  >  Qu'est-ce que la sérialisation ? Une introduction détaillée à la sérialisation

Qu'est-ce que la sérialisation ? Une introduction détaillée à la sérialisation

PHP中文网
PHP中文网original
2017-06-20 14:25:493049parcourir

1 Sérialisation

1. Qu'est-ce que la sérialisation ?

L'écriture d'objets en mémoire sur le disque dur est une sérialisation, qui n'est pas différente de la sortie générale, sauf que les données de sortie sont un objet, pas un texte ordinaire.

2. Le rôle de la sérialisation

Parce que le stockage des données en mémoire est temporaire, si vous devez sauvegarder l'objet pendant une longue période temps, vous devez L'écriture sur le disque dur entraîne la sérialisation.

3. Conditions de sérialisation

Pour qu'un objet soit sérialisé, la classe à laquelle appartient l'objet doit implémenter l'interface Serialisable. est une interface emblématique sans aucun champ ni méthodes abstraites Lorsque la JVM rencontre cette interface, elle attribuera un numéro de version sérialisé à la classe.

4. Un objet est sérialisé et les variables globales de l'objet, y compris les variables de type privé, seront écrites sur le disque dur.

5. Champs qui ne peuvent pas être sérialisés :

  1. Les champs statiques ne peuvent pas être sérialisés, la valeur d'une variable statique Il s'agit de la valeur dans la JVM actuelle, et non de la valeur définie lors de la sérialisation.

  2. Les champs modifiés par transitoire ne peuvent pas être sérialisés.

6. Opération de sérialisation :

OutputStream ops=new FileOuptStream(path);
ObjectOuptStream oos=new ObjectOutputStream(ops);
Object obj=new Ojbect();
oos.writeObject(obj);

2 Désérialisation

1. Qu'est-ce que la désérialisation

La désérialisation consiste à écrire les données du disque dur dans la mémoire et à obtenir des objets enregistrés dans des fichiers. .

2. Exigences de l'opération de désérialisation

L'ordre de désérialisation doit être cohérent avec l'ordre de sérialisation.

3. Numéro de version de sérialisation

⑴ Lors de la sérialisation, un numéro long est généré, appelé numéro de version de sérialisation, et est enregistré au en même temps Dans les fichiers sérialisés et les fichiers de classe, comparez les deux numéros lors de la désérialisation. S'ils sont identiques, la sérialisation est réussie ; s'ils ne sont pas identiques, la désérialisation ne peut pas être effectuée.

⑵ Le numéro de version sérialisé est utilisé pour marquer la version de la classe d'entité une fois la classe d'entité modifiée, si le numéro de version sérialisé n'est pas explicitement spécifié. , le système générera automatiquement un nouveau numéro de version. Si les deux numéros de version sont différents, ils ne peuvent pas être sérialisés. Généralement, le numéro de version de sérialisation est explicitement défini dans la classe d'entité qui doit être sérialisée.

⑶ Ne pas recompiler ne générera pas nécessairement un nouveau numéro de version sérialisé. Ce n'est que lorsque la classe d'entité change qu'un nouveau numéro de version sérialisé sera généré.

⑷Processus d'analyse

Lors de la désérialisation, comparez d'abord si le numéro de version sérialisé dans le fichier sérialisé et le fichier de classe sont identiques. sont les mêmes, indiquant que le fichier sérialisé est généré par le fichier de classe actuel et peut être désérialisé ; ce n'est pas la même chose, indiquant qu'il n'est pas généré par le fichier de classe actuel, la version est incohérente et ne peut pas être désérialisée ; être désérialisé.

⑸Opération de séquence inverse :

InputStream is=new FileInputStream(path);
ObjectInputStream ois=new ObjectIputStream(is);
Object obj=ois.readObject();

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn