Serialisation

Serialization.

Besoin

Enregistrer l'état d'un objet pour :

Analyse

La sérialisation consiste à enregistrer tout ce qui constitue l'état d'un objet dans un flux quelconque (fichier, socket, etc.). Cela peut inclure l'ensemble de ses attributs ou une sélection de ceux-ci. Ces attributs peuvent être aussi bien des types simples que d'autres objets complexes, incluant eux-même des attributs complexes, etc.

Conception

Un objet Java peut être sérialisé :

Implémentation

java.io.Serializable + constructeur public par défaut

Limitations

Exemples

Un exemple d'objet sérialisable est :

class MonObject extends MonAncetre <strong>implements java.io.Serializable </strong>{<br> protected int id; <span class="codeComment">// Sera sérialisé</span><br> private String nom; <span class="codeComment"> // Sera sérialisé</span><br> private OtherObject objet; <span class="codeComment"> // Sera sérialisé</span><br> private <strong>transient </strong>Thread traitement; <span class="codeComment">// Ne sera pas sérialisé</span><br> <br> <span class="codeComment">/**<br> * Constructeur par défaut.<br> * Nécessaire pour la désérialisation.<br> */</span><br> <strong>public MonObject() </strong>{<br> } <br> }

Un exemple de sérialisation personnalisée est :

class MonObject extends MonAncetre implements java.io.Serializable<strong> </strong>{<br> protected int id;<br> private String nom;<br> private OtherObject objet;<br> private transient Thread traitement;<br> <br> public MonObject() {<br> } <br> <br> <span class="codeComment">/**<br> * Personalisation de la désérialisation<br> */</span><br> <strong> private void readObject(ObjectInputStream someObjectStream) {</strong><br> try {<br> <strong>someObjectStream.defaultReadObject();</strong> <span class="codeComment">// Exécute la sérialisation par défaut d'abord</span><br> traitement = new Thread (nom); <span class="codeComment">// Récrée un Thread similaire (qui n'était pas sérialisable)</span><br> } catch (Exception e) {<br> throw new RuntimeException(<span class="codeString">"Erreur lors de la désérialisation: "</span> + e);<br> }<br> }<br> }

Voir