Les classes
ObjectOutputStream
et
ObjectInputStream
permettent de rendre persistants les objets de
Java en les sauvegardant sur un flot (qui peut être écrit sur un
fichier), puis en les relisant. Seuls les objets dont la classe
implémente l'interface
Serializable peuvent
bénéficier de ce mécanisme, appelé
sérialisation . Si un objet
comporte des champs qui sont des références à d'autres objets
sérialisables, ces objets sont aussi sérialisés ; un objet partagé (par
exemple, figure 1.16, p. ) ne sera
sauvegardé qu'en un seul exemplaire. Ces fonctionnalités sont encore
obtenues par décoration d'un flot.
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("toto")); oos.writeObject("Aujourd'hui"); oos.writeObject(new java.util.Date());
La lecture de ces objets, qui se fait dans le même ordre que leur écriture, doit opérer un transtypage d'Object vers la classe que l'on veut restituer :
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("toto")); String chaîne = (String) ois.readObject(); java.util.Date date = (java.util.Date) ois.readObject();
Pour faire bénéficier une classe de ce mécanisme, il suffit de déclarer que la classe implémente Serializable, interface qui ne déclare aucune méthode.