Leçon 45 : Sérialisation et Désérialisation d'objets
La Sérialisation est le processus de conversion de l'état d'un objet en une séquence d'octets (un flux). Ce flux peut ensuite être enregistré dans un fichier ou transmis via un réseau.
La Désérialisation est le processus inverse : reconstruire l'objet à partir du flux d'octets.
1. Rendre une classe sérialisable
Pour qu'un objet soit sérialisable, sa classe doit implémenter l'interface marqueur java.io.Serializable.
java import java.io.Serializable;
public class Employee implements Serializable { // Les champs doivent également être sérialisables, ou marqués 'transient' private String name; private int id;
// les champs transient sont ignorés lors de la sérialisation
private transient String password;
// Meilleure pratique : ajouter un ID unique pour le contrôle de version
private static final long serialVersionUID = 1L;
}
2. Sérialisation (Écriture de l'objet)
Nous utilisons ObjectOutputStream, qui doit envelopper un flux d'octets (comme FileOutputStream).
java // Flux de sortie try (FileOutputStream fileOut = new FileOutputStream("employee.ser"); ObjectOutputStream objOut = new ObjectOutputStream(fileOut)) {
Employee emp = new Employee("John", 101);
objOut.writeObject(emp); // Écrit l'objet entier dans le flux
System.out.println("Objet Employee sérialisé.");
} catch (IOException i) { i.printStackTrace(); }
3. Désérialisation (Lecture de l'objet)
Nous utilisons ObjectInputStream et devons transtyper l'objet Object lu vers le type de classe spécifique.
java // Flux d'entrée try (FileInputStream fileIn = new FileInputStream("employee.ser"); ObjectInputStream objIn = new ObjectInputStream(fileIn)) {
Employee e = (Employee) objIn.readObject(); // Lecture et transtypage
System.out.println("Employee désérialisé : " + e.getName());
} catch (IOException | ClassNotFoundException e) { e.printStackTrace(); }