import java.beans.*;
import java.io.*;
public class XMLSerialisationSample {
public static void main(String[] args) {
// Création des noeuds
System.out.println("Affichage avant sérialisation :");
Node root = new Node("Racine"); // Noued racine
Node node1 = new Node("Noeud 1"); // D'autres noeuds
Node node2 = new Node("Noeud 2");
// Construction de la liste chainée
root.attach(node1);
node1.attach(node2);
// Affichage de notre liste
root.printList();
// Enregistrement de nos noeuds à partir de la racine
try {
XMLEncoder e = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("TestNode.xml")));
e.writeObject(root);
e.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
// Destruction de notre liste
node2 = null;
node1 = null;
root = null;
// Lecture (désérialisation) de notre fichier XML
try {
XMLDecoder d = new XMLDecoder(new BufferedInputStream(
new FileInputStream("TestNode.xml")));
root = (Node) d.readObject();
d.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// Affichage de notre liste
System.out.println("Affichage après désérialisation :");
root.printList();
}
}
... Classe dans son propre fichier
public class Node implements Serializable {
private Object value;
private Node prev;
private Node next;
public Node() {
prev = null;
next = null;
value = null;
}
public Node(Object val){
value = val;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Node getPrev() {
return prev;
}
public void setPrev(Node prev) {
this.prev = prev;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public void attach(Node node){
next = node;
node.prev = this;
}
public boolean isFirst(){
return prev == null;
}
public void printList(){
Node n = this;
while (n != null){
System.out.print(n + "\n");
n = n.next;
}
}
public String toString() {
return "<Node> value = " + (value != null ? value : "NULL");
}
}
Remarque :
Cet exemple est très simple, tout comme l'est la sérialisation XML. Pour de plus amples informations sur ce principe, veuillez consulter la javadoc :
- http://java.sun.com/j2se/1.4.2/docs/api/java/beans/XMLEncoder.html
- http://java.sun.com/j2se/1.4.2/docs/api/java/beans/XMLDecoder.html
- http://java.sun.com/j2se/1.4.2/docs/guide/serialization/
Attention : la sérialisation XML est spécialisé dans les javaBeans
(c'est à dire les classes possédant des propriétés (un attributs et des accesseurs get/set appropriés) publiques.
Il y a 4 choses qui sont donc INDISPENSABLE pour ça :
- Un constructeur par défaut (sans paramètres)
- La classe doit implémenter l'interface Serializable
- Toutes les propriétés que vous devez enregistrer doivent avoir des accesseurs (get/set)
- Etre une classe PUBLIQUE !! public class (La classe doit être dans son propre fichier !)