Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

La sérialisation dans Java

Par Mohamed AIT ABDERRAHMAN Publié le 30/10/2015 à 23:41:43 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Introduction

Imaginez que vous voulez sauvegarder l'état d'un ou plusieurs objets. Vous aurez besoin d’utiliser l'une des classes d'Entrée/Sortie pour écrire l'état des attributs de tous les objets que vous souhaitez enregistrer. Le pire serait d'essayer de reconstruire ces objets pour qu’ils soient, pratiquement, identiques à ceux sauvegardés. Vous aurez besoin d’élaborer votre propre manière dont vous avez sauvegardé et restauré l'état de chaque objet, ou vous pourriez finir par l’initilisation des attributs avec des valeurs erronées.

Par exemple, imaginez que vous avez stocké un objet de type Student qui a comme attributs : id, fullName et email. Au moment où vous enregistrez son état, vous pouvez écrire ces attributs comme un entier et deux chaines de caractères dans un fichier, mais l'ordre dans lequel vous les écrivez est crucial. Il serait trop facile de restaurer l'objet par la suite, mais vous pourriez mélanger les valeurs, mettre l’email dans la variable fullName et le nom dans la variable email.

La Sérialisation vous permet de tout simplement dire « sauvegarder cet objet et l'ensemble de ses attributs ». Et aussi dire « sauvegarder cet objet et quelques attributs », cela se fait on marquant ces attributs par le mot-clés transient.

Les classes nécessaires

La magie d’une sérialisation basique se fait avec seulement deux méthodes: la première permet de sérialiser l’objet et de l’écrire dans un flux, et la seconde pour lire le flux et désérialiser les objets.

ObjectOutputStream.writeObject(); // sérialiser et écrire

ObjectInputStream.readObject(); // lire et desérialiser

Les classes ObjectOutputStream et ObjectInputStream sont considérés comme des classes de niveau supérieur dans le package java.io, vous devez les envelopper avec d'autres classes de niveau inférieur, tels que java.io.FileOutputStream et java.io.FileInputStream. Voici un petit programme qui crée un objet Student, le sérialise, puis il le désérialise:

import java.io.*;

class Student implements Serializable { } // 1

public class SerializeStudent {

   private static final String FILE_NAME = "student.ser";

   public static void main(String[] args) {
      Student me = new Student(); // 2
  
      // sérialisation
      try {
         FileOutputStream fs = new FileOutputStream(FILE_NAME);
         ObjectOutputStream os = new ObjectOutputStream(fs);
         os.writeObject(me); // 3
         os.close();
      } catch (Exception e) { 
         e.printStackTrace(); 
      }
  
  
      // desérialisation
      try {
         FileInputStream fis = new FileInputStream(FILE_NAME);
         ObjectInputStream ois = new ObjectInputStream(fis);
         me = (Student) ois.readObject(); // 4
         ois.close();
      } catch (Exception e) { 
         e.printStackTrace(); 
      }
   }
}

Jetons un coup d’oeuil sur les points clés de cet exemple:

  1. Nous déclarons la classe Student qui implémente l'interface Serializable. Serializable est une interface marqueur; il ne fournit pas de méthodes à implémenter.

  2. On instancie un objet de type Student, qui comme nous le savons est sérialisable.

  3. On sérialise l'objet Student. Il a fallu une bonne quantité de préparation avant que nous puissions effectivement sérialiser notre chat. Tout d'abord, nous mettons tout notre code lié aux E/S dans un bloc try…catch. Ensuite, nous créons un FileOutputStream pour écrire l'objet. Ensuite, nous l’enveloppons (wrap) dans un objet de type ObjectOutputStream, qui est la classe qui founit la méthode magique de sérialisation dont nous avons besoin, la méthode writeObject(). Rappelez-vous que l'invocation de cette méthode effectue deux tâches: il sérialise l'objet, puis il écrit l'objet sérialisé dans un fichier.

  4. On désérialise l'objet Student en invoquant la méthode readObject(). Cette méthode retourne un objet, nous avons donc de jeter l'objet désérialisé revenir à un Student.

Conclusion

Ceci est un exemple simple de la sérialisation en action. Ca va vous aider à bien comprendre le mécanisme et à l’adopter, en cas de besoin, dans vos futurs projets.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels