Sérialisation et désérialisation en Java
La sérialisation est le processus de conversion de l'état d'un objet en un flux d'octets afin qu'il puisse être transmis sur le réseau ou enregistré de manière permanente sur le disque. La désérialisation est le processus de restauration d'un flux d'octets sérialisé dans un objet. En Java, la sérialisation et la désérialisation sont implémentées via ObjectInputStream et ObjectOutputStream.
Pourquoi avons-nous besoin de sérialisation ?
Dans les applications modernes, l'état des objets doit souvent être transféré entre différents systèmes, processus et threads. Par exemple, dans un système distribué, les objets peuvent devoir être transférés entre différents serveurs. Un autre exemple est que lors du stockage d'objets dans le cache, les objets doivent être sérialisés afin de pouvoir être enregistrés sur le disque.
Sérialisation en Java
Java fournit une interface sérialisable pour implémenter la sérialisation. L'interface Serialisable est juste une interface de marqueur sans aucune méthode, elle indique simplement au compilateur que cette classe est sérialisable. Si une classe implémente l'interface Serialisable, les objets de cette classe peuvent être sérialisés. Par exemple :
public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
Dans l'exemple ci-dessus, la classe Person implémente l'interface Serialisable, indiquant que la classe peut être sérialisée.
Désérialisation en Java
La désérialisation en Java est le processus de restauration d'un flux d'octets sérialisé dans un objet. La désérialisation peut être implémentée à l'aide de la classe ObjectInputStream. Par exemple :
try { FileInputStream fileIn = new FileInputStream("person.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); Person person = (Person) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); } catch (ClassNotFoundException c) { c.printStackTrace(); }
Dans l'exemple ci-dessus, nous créons d'abord un objet FileInputStream, puis le transmettons au constructeur ObjectInputStream pour créer l'objet ObjectInputStream. Après cela, nous lisons l'objet à partir d'ObjectInputStream à l'aide de la méthode readObject(). Enfin, nous fermons ObjectInputStream et FileInputStream.
Il est à noter que lorsque vous désérialisez, la classe sérialisée doit exister. Si la classe sérialisée n'existe pas, une exception ClassNotFoundException sera levée.
La sérialisation et la désérialisation en Java sont très importantes, permettant de transmettre des objets entre différents systèmes, processus et threads. Dans le même temps, Java fournit également certaines méthodes pour contrôler le comportement de sérialisation et de désérialisation des objets, telles que les méthodes transient, writeObject() et readObject(). Étant donné que la sérialisation et la désérialisation ont un impact important sur les performances, leur utilisation doit être évitée le cas échéant.
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!