[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Non-Officiels
> Programmation
> Java
> La serialisation d'objet en Java
> Lecture du tutoriel
La serialisation d'objet en Java
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Bonjour à tous

!
Nous allons voir aujourd'hui une technique très utile lorsque vous programmez :
la sérialisation. Que se cache-t-il derrière ce nom barbare ? Eh bien c'est simple : grâce à ce procédé, nous allons être capables de sauvegarder les valeurs des attributs d'un objet dans un simple fichier binaire ou XML ! Hum... j'ai l'impression que mon explication n'est pas très parlante... alors... prenons un exemple tout simple : vous développez un petit jeu et comme dans tous les jeux, il y a des paramètres d'origine, tel que :
- les options graphiques ;
- les options de son ;
- les réglages du clavier...
Donc, dans un premier temps, vous fixez vous-mêmes ces paramètres, mais le joueur, lui, voudra sûrement les modifier ? Et il voudra surtout que ces paramètres restent mémorisés dans le jeu (car le joueur n'aime pas reconfigurer son jeu à chaque lancement

) ? Je vous vois venir, vous allez me dire : "on va stocker les informations dans un fichier .ini ou dans une base de données". Eh bien en fait, on va stocker les informations dans un fichier (mais pas un fichier ini, un fichier binaire) et nous n'utiliserons pas de base de données (une BDD pour sauver 4 paramètres... vous me faites rire, les gars, là

).
Nous allons voir deux types de sérialisations :
- la sérialisation binaire ;
- la sérialisation XML.
Nous allons utiliser la classe
Personne.java pour réaliser nos tests ; je vous laisse le soin de la consulter, et je vous en dirai quelques mots plus bas : vous pourrez constater que pour une fois, on ne va pas jouer avec la console, mais avec
swing
(oui, y en a marre de cette console, à force

).
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 | import javax.swing.JOptionPane;
import java.io.Serializable;
public class Personne implements Serializable {
private String nom, prenom;
private int age;
public Personne() {
nom = "Pas de nom";
prenom = "Pas de prénom";
age = 0;
}
public Personne(String nom, String prenom, int age) {
this.nom = nom;
this.prenom = prenom;
this.age = age;
}
/* Affichage d'une personne en mode graphique */
public void affichePersonne() {
JOptionPane.showMessageDialog(null,
"nom : " + nom + "\nPrenon : " + prenom + "\nage : " + age,
"Personne",
JOptionPane.INFORMATION_MESSAGE);
}
/* Accesseurs et mutateurs */
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
}
|
Bon alors, qu'est-ce qu'il y a de nouveau avec cette classe ? Eh bien mis à part qu'elle utilise une boîte de dialogue pour afficher les informations des personnes, elle implémente une interface ; d'ailleurs, vous noterez qu'on ne redéfinit aucune méthode ! Le fait d'implémenter cette interface rend notre objet sérialisable (l'est pas belle, la vie ?). Si vous regardez la structure de la classe, vous noterez qu'elle contient un constructeur sans argument (non obligatoire pour la sérialisation binaire, mais obligatoire pour la sérialisation XML), et qu'elle contient aussi des méthodes d'accès aux données (
set
et
get
). Une classe qui a cette architecture est nommée
JavaBeans
(elle respecte un standard), mais je vous invite à consulter
cette présentation pour de plus amples informations (ce n'est pas le but du tutoriel).
À titre d'info, voilà ce que nous dit Wikipedia à ce sujet :
Citation : WikipediaUn composant JavaBean est une simple classe Java qui respecte certaines conventions sur le nommage des méthodes, la construction et le comportement. Le respect de ces conventions rend possible l'utilisation, la réutilisation, le remplacement et la connexion de JavaBeans par des outils de développement.
Sérialiser un objet...
Le principe de la sérialisation est de sauvegarder l'état d'un objet à un instant donné, et on sauvegarde cet état dans un fichier séquentiel, que l'on appelle aussi fichier binaire, car quand vous l'ouvrez avec un éditeur de texte, eh bien vous ne voyez pas grand-chose, et c'est difficilement modifiable.
On va procéder par étapes pour effectuer notre première sérialisation ; je vous rassure, c'est vraiment simple et rapide. Tout d'abord, nous avons besoin de trois classes pour réaliser une sérialisation binaire :
- ObjectOutputStream
- FileOutputStream
- IOException
On va donc commencer par les importer dans notre programme principal.
Code : Java1
2
3 | import java.io.ObjectOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
|
Étudions ces trois classes
FileOutputStream
C'est un flux
(Stream) de sortie
(Output) qui nous permet d'ouvrir un fichier
(File) (séquentiel (
aussi appelé binaire) dans notre cas), son constructeur prend en paramètre un fichier ; on pourra par exemple construire un tel objet de cette manière :
Code : Java1 | FileOutputStream monFichier = new FileOutputStream("fichier.dat");
|
ObjectOutputStream
C'est un flux
(Stream) de sortie
(Output) qui va nous permettre "d'écrire" un objet
(Object) de n'importe quel type dans un fichier binaire. Pour construire un tel objet, nous ferons comme suit :
Code : Java1 | ObjectOutputStream serial = new ObjectOutputStream(new FileOutPutStream("fichier.dat"));
|
On utilisera trois méthodes avec cette classe :
- writeObject(monObjet)
: cette méthode "écrit" l'objet dans le fichier binaire spécifié ;
- flush()
: cette méthode vide le cache et force l'écriture dans le fichier binaire spécifié ;
- close()
: cela va fermer le flux, c'est obligatoire !
Si le fichier n'existe pas, il est créé ; s'il existe, il est vidé !
IOException
est l'exception qui peut être levée, nous ne la traiterons pas dans ce tutoriel (on utilisera
throws
au début du main).
Sauvegarde de l'état d'un objet Personne dans un fichier binaire
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | import java.io.ObjectOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestSerialisation {
public static void main(String[] args) throws IOException {
/*
* On crée une nouvelle personne du nom de Squall Leonhart qui a 17 ans
* On affiche ensuite cette personne (merci Swing)
* Les informations sont conformes
*/
Personne p = new Personne("Leonhart", "Squall", 17);
p.affichePersonne();
/*
* On crée un objet de type ObjectOutputStream, qui prend un fichier en paramètre
* La sérialisation commence tout de suite après
* Grâce à la méthode writeObject() on sauvegarde l'état de l'objet passé en paramètre
* la méthode flush() permet de vider le cache, elle est indispensable
* On finit par fermer notre flux ObjectOutputStream
*/
ObjectOutputStream serialise = new ObjectOutputStream(new FileOutputStream("fichier.dat"));
serialise.writeObject(p);
serialise.flush();
serialise.close();
}
}
|
Voilà, c'est fait ! Oui, juste ça.

On va maintenant regarder à quoi ressemble notre fichier.dat : vous pouvez l'ouvrir avec un éditeur de texte et constater que... c'est incompréhensible.

C'est normal, c'est un fichier binaire (je vous avais prévenus !).
Puis le désérialiser...
On va maintenant passer aux choses sérieuses ! Il faut récupérer les valeurs de notre objet
Personne. Nous utiliserons un nouveau programme principal. Cette fois, il y aura quatre classes à utiliser et trois à importer.
- FileInputStream
- ObjectInputStream
- IOException
- ClassNotFoundException
Comme nous l'avons fait plus haut, nous ne traiterons pas les exceptions (on utilisera simplement
throws
), Vous pourrez tout de même remarquer qu'une nouvelle exception de type
ClassNotFoundException
peut être levée. Nous allons donc nous concentrer sur les nouvelles méthodes ! Et pour commencer, nous importons les nouvelles classes.
Code : Java1
2
3 | import java.io.ObjectInputStream;
import java.io.FileInputStream;
import java.io.IOException;
|
FileInputStream
C'est un flux d'entrée, qui permet d'ouvrir un fichier (séquentiel, dans notre cas) ; sa construction est identique à
FileOutputStream
.
Code : Java1 | FileInputStream monFichier = new FileInputSrteam("fichier.dat");
|
ObjectInputStream
Vous l'avez deviné... c'est un flux d'entrée

; il va nous permettre de récupérer l'état d'un objet contenu dans un fichier séquentiel. Sa construction est identique à
ObjectOutputStream
, à savoir :
Code : Java1 | ObjectInputStream retour = new ObjectOutputStream(new FileInputStream("fichier.dat"));
|
On utilisera... deux méthodes, cette fois :
- readObject()
: cette méthode nous permet de "lire" dans le fichier les états sauvegardés de l'objet ;
- close()
Vous remarquez sûrement qu'on travaille avec un type Object
, qui est LA super classe en Java ; cela implique un transtypage (cast) obligatoire, mais nous y reviendrons.
Voici le code de chargement, je vous le commente juste après.
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | import java.io.ObjectInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class TestSerialisation {
public static void main(String[] args) throws IOException, ClassNotFoundException {
/* Création d'un objet de type ObjectInputStream avec comme paramètre un fichier binaire */
ObjectInputStream deserialise = new ObjectInputStream(new FileInputStream("fichier.dat"));
/*
* On crée ensuite une nouvelle Personne, que l'on nomme personne
* Elle est initialisée avec la valeur de retour de la méthode readObject()
* On effectue un cast car le retour de la méthode readObject est de type Object
* Et on veut une Personne.
* On utilise ensuite la méthode affichePersonne() de la classe Personne
* Le résultat est conforme
* On ferme le flux
*/
Personne personne = (Personne) deserialise.readObject();
personne.affichePersonne();
deserialise.close();
}
}
|
Vous pouvez constater qu'il y a plus de commentaires que de code ! Oui, la sérialisation, c'est rapide et facile.
À propos du cast : 6n utilise une méthode qui renvoie un
Object
, vous créez une
Personne qui est, comme vous le savez, une classe dérivée de
Object
, mais qui n'est pas un
Object
! Il faut donc faire une conversion. Si ce point ne vous paraît pas évident, je vous invite à relire le cours de cysboy sur les
opérateurs de cast .
Un peu plus loin dans la sérialisation...
Vous savez tout sur la technique de base, mais il y a encore des choses à savoir sur la sérialisation d'un objet. Par exemple, vous constatez que dans notre code, tous les attributs sont sauvegardés !
Comment faire pour sauvegarder uniquement les attributs de notre choix ?
La réponse est toute simple : vous n'avez qu'à placer le mot clé
transient devant votre attribut, celui-ci ne sera pas sauvegardé par
writeObject()
, ni lu par
readObject()
, la valeur de l'attribut sera donc initialisée à
null. On pourrait donc modifier notre classe de cette manière :
Code : Java1
2
3
4
5
6
7 | public class Personne implements Serializable {
private String nom, prenom;
/* L'attribut age ne sera pas sauvé, et il sera initialisé à null au chargement */
private transient int age;
// Reste de la classe
}
|
On va passer maintenant à quelque chose de plus intéressant, la sérialisation XML !
Alors là, on fait un abus de langage, car on ne peut pas vraiment parler de sérialisation avec XML, mais le principe reste le même ; nous ferons donc comme si

. Vous vous souvenez quand je vous parlais de JavaBeans ? Ces composants java qui sont de simples classes respectant une norme ? Eh bien, pour réaliser une sauvegarde de vos objets vers un fichier XML, il faudra que votre classe respecte en partie cette norme, à savoir :
- un constructeur sans paramètre ;
- des méthodes d'accès aux données (set
et get
)
.
Si vous regardez la classe
Personne, elle respecte ces standards, elle est sérialisable et possède des méthodes d'accès aux données.
Si dans votre classe vous oubliez de mettre un getter ou un setter, l'attribut en question ne sera pas sauvegardé ! Cela vous permettra par exemple de choisir ce que vous voudrez sauvegarder... Une autre petite chose : pour utiliser la "sérialisation XML", la classe n'a pas obligatoirement besoin d'implémenter Serializable
.
Passons tout de suite à la sauvegarde d'un objet vers un fichier XML.
Objet vers XML
Dans un premier temps, nous devons créer un nouveau programme de test (oui, c'est le 3
e, et il y en a encore : au moins un

), puis nous verrons quelles classes nous devrons importer, et enfin, la description des méthodes ; puis, pour terminer, le code source complet suivi d'une explication.
Les nouveaux imports
Code : Java1
2
3 | import java.beans.XMLEncoder;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
|
Vous connaissez déjà
FileOutputStream
, je ne vous le représenterai donc pas ; vous remarquerez aussi qu'il y a une nouvelle exception (juste une, cette fois), qui, comme dans la 1
ère partie, ne sera pas traitée (utilisation de
throws
). Nous allons donc nous intéresser à la classe
XMLEncoder
: d'ailleurs, si vous avez fait attention, elle fait partie du package... java.beans, ça ne vous rappelle rien ?
XMLEncoder
Le constructeur de
XMLEncoder
prend en paramètre un fichier XML, on va donc lui en donner un avec la classe
FileOutputStream
:
Code : Java1 | XMLEncoder enc = new XMLEncoder(new FileOutputStream("fichier.xml"));
|
On utilise ensuite 3 méthodes qui sont... exactement les mêmes que pour la sérialisation binaire, à savoir :
- writeObject()
- flush()
- close()
Je ne pense pas avoir besoin de vous détailler ces méthodes, car je l'ai déjà fait plus haut. Nous allons donc passer au code de test !
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | import java.beans.XMLEncoder;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
public class TestSerialisation {
public static void main(String[] args) throws FileNotFoundException {
/*
* On crée une nouvelle Personne et on l'affiche
* On crée un nouvel objet de type XMLEncoder avec comme paramètre
* un fichier XML
* On "écrit" notre objet dans le fichier XML avec writeObject()
* On vide le cache et force l'écriture
* On finit par fermer l'objet (on libère la mémoire)
*/
Personne p = new Personne("Loire", "Laguna", 27);
p.affichePersonne();
XMLEncoder enc = new XMLEncoder(new FileOutputStream("fichier.xml"));
enc.writeObject(p);
enc.flush();
enc.close();
}
}
|
Et voilà, c'est fini ! Maintenant, prenez votre éditeur de texte préféré et ouvrez le fichier XML qui a été créé.
Code : XML 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | <?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_06" class="java.beans.XMLDecoder">
<object class="serialisation.Personne">
<void property="age">
<int>27</int>
</void>
<void property="nom">
<string>Loire</string>
</void>
<void property="prenom">
<string>Laguna</string>
</void>
</object>
</java>
|
Que constatez-vous ? Oui, c'est parfaitement lisible, et c'est normal, c'est du XML ! Vous pouvez - si vous le voulez - modifier les valeurs des attributs, ils seront automatiquement pris en compte lors du décodage... heu... de la désérialisation, excusez-moi

.
XML vers Objet
Nous allons aller vite, car à force, c'est répétitif, non ? Vous l'aurez sans doute deviné, mais nous allons encore utiliser les mêmes méthodes que pour la désérialisation binaire ! Pour ce qui est de notre dernier programme de test, nous devons importer deux nouvelles classes, qui sont :
Code : Java1
2 | import java.beans.XMLDecoder;
import java.io.FileInputStream;
|
On utilisera encore la classe
FileNotFoundException
.
Utilisation de XMLDecoder
Un objet
XMLDecoder
se construit comme nous en avons pris l'habitude : avec un fichier XML en paramètre !
Code : Java1 | XMLDecoder decode = new XMLDecoder(new FileInputStream("fichier.xml"));
|
Nous utiliserons les méthodes suivantes :
- readObject
: qui renvoie un Object
donc il faudra caster !
- close()
: fermeture du flux.
N'oubliez surtout pas de faire la conversion, on travaille avec des types
Object
, et votre classe d'origine n'est pas un
Object
, mais un type plus complexe, donc castez, castez, castez ; enfin, une seule fois ça suffit, hein !
Voici le code Java qui va nous permettre de récupérer les valeurs des attributs contenus dans notre fichier XML.
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | import java.beans.XMLDecoder;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class TestSerialisation {
public static void main(String[] args) throws FileNotFoundException {
/*
* Création d'un objet de type XMLEncoder avec comme paramètre un fichier... XML
* On crée une nouvelle personne grâce à la méthode readObject, n'oubliez pas le cast !
* readObject est une méthode (aussi appelée fonction car elle renvoie quelque chose), qui
* renvoie un Object.
* On ferme notre objet XMLDecoder, car nous n'en avons plus besoin
* On affiche l'objet nouvellement créé ! Et le résultat est... conforme !
*/
XMLDecoder dec = new XMLDecoder(new FileInputStream("fichier.xml"));
Personne p = (Personne) dec.readObject();
dec.close();
p.affichePersonne();
}
}
|
Après lancement de la méthode
afficherPersonne(), vous remarquez que tout est conforme (le contraire aurait été gênant, quand même !). Et voilà, vous avez fini ! Il ne reste plus qu'à l'appliquer dans vos projets, cela les rendra nettement plus dynamiques.
Que se passe-t-il si on enlève une valeur dans le fichier XML ?
La réponse est simple : l'attribut sera initialisé à
null, ce qui veut dire que dans notre cas, la boîte de dialogue n'affichera aucune valeur.
Nous en avons fini avec les techniques de base de la sérialisation XML ; qu'on ne puisse pas vraiment parler de sérialisation, je ne vais pas m'étendre sur ce point, vous trouverez des ressources dans la
javadoc.
On ne peut pas finir comme ça ! Je vais vous faire un cadeau : j'ai écrit une classe qui vous permet de sérialiser des objets (binaires ou XML), mais ce qui est bien avec cette classe, c'est qu'elle contient uniquement des méthodes statiques et gère les exceptions (avec des blocs
try catch
). Bien sûr, vous pourrez faire VOTRE classe perso, mais peut-être que celle-là vous servira, qui sait... Elle est totalement commentée avec la JavaDoc, et affiche des messages d'erreur graphiques (non, je ne suis pas fâché avec la console, mais je trouve ça sympa, Swing : pas vous ?). Je vous laisse consulter / copier la classe, puis je vous fais une démonstration de sa... puissance

(mais il se prend pour qui, celui-là ?

).
Secret (cliquez pour afficher)Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180 | /* Import des classes pour réaliser un encodage et décodage XML */
import java.beans.XMLEncoder;
import java.io.FileOutputStream;
import java.beans.XMLDecoder;
import java.io.FileInputStream;
/* Import des classes pour réaliser la sérialisation et la déserialisation */
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/* Import des exceptions qui peuvent être levées */
import java.io.FileNotFoundException;
import java.io.IOException;
/* Import de la classe Swing pour la gestion graphique des erreurs */
import javax.swing.JOptionPane;
/**
* Cette classe permet de sérialiser et désérialiser un objet sous le format binaire
* ou le format XML. Pour le format XML, se référencer aux commentaires des méthodes.
* Pour le format binaire, la classe à sérialiser doit implémenter obligatoirement
* l'interface serializable.
* @author demonixis - pour le Site du Zér0
* @version 1.0
*/
public final class SauvegardeObjet
{
/**
* Cette méthode sauvegarde les valeurs d'un objet vers un fichier XML (sérialisation)
* Attention : l'objet doit contenir un constructeur sans paramètres, et seuls les attributs
* qui ont des accesseurs et des mutateurs seront sauvés, les autres seront ignorés
* @param objet est l'objet à sauver
* @param fichier est le chemin du fichier XML
*/
public static void sauverVersXML(Object objet, String fichier)
{
try
{
XMLEncoder enc = new XMLEncoder(new FileOutputStream(fichier));
try
{
enc.writeObject(objet);
enc.flush();
}
finally
{
enc.close();
}
}
catch (FileNotFoundException fnf)
{
JOptionPane.showMessageDialog(null,
"Le fichier n'existe pas", "Erreur",
JOptionPane.ERROR_MESSAGE);
}
}
/**
* Cette méthode charge les valeurs d'un objet qui était dans un fichier XML (désérialisation)
* Attention : Il faut prévoir un transtypage lors de l'utilisation de cette méthode
* @param fichier est le chemin du fichier XML
* @return un objet codé dans le fichier XML
*/
public static Object chargerDepuisXML(String fichier)
{
Object retour = null;
try
{
XMLDecoder dec = new XMLDecoder(new FileInputStream(fichier));
try
{
retour = dec.readObject();
}
finally
{
dec.close();
}
}
catch (FileNotFoundException fnf)
{
JOptionPane.showMessageDialog(null,
"Le fichier n'existe pas", "Erreur",
JOptionPane.ERROR_MESSAGE);
}
return retour;
}
/**
* Cette méthode permet de sérialiser un objet
* @param obj est l'objet à sérialiser
* @param fichier est le fichier binaire
*/
public static void serialiser(Object obj, String fichier)
{
try
{
ObjectOutputStream serialiser = new ObjectOutputStream(new FileOutputStream(fichier));
try
{
serialiser.writeObject(obj);
serialiser.flush();
}
finally
{
serialiser.close();
}
}
catch (FileNotFoundException fnf)
{
JOptionPane.showMessageDialog(null,
"Le fichier n'existe pas", "Erreur",
JOptionPane.ERROR_MESSAGE);
}
catch (IOException ioe)
{
JOptionPane.showMessageDialog(null,
"La classe n'est pas serialisable", "Erreur",
JOptionPane.ERROR_MESSAGE);
}
}
/**
*
* @param fichier est le fichier binaire qui contient les informations
* @return un objet désérialisé ; attention : il faudra transtyper
* @throws java.lang.ClassNotFoundException
*/
public static Object deserialiser(String fichier)
{
Object retour = null;
try
{
ObjectInputStream deserialise = new ObjectInputStream(new FileInputStream(fichier));
try
{
retour = deserialise.readObject();
}
finally
{
deserialise.close();
}
}
catch (FileNotFoundException fnf)
{
JOptionPane.showMessageDialog(null,
"Le fichier n'existe pas", "Erreur",
JOptionPane.ERROR_MESSAGE);
}
catch (IOException ioe)
{
JOptionPane.showMessageDialog(null,
"La classe n'est pas serialisable", "Erreur",
JOptionPane.ERROR_MESSAGE);
}
catch (ClassNotFoundException cnfe) { }
return retour;
}
}
|
Voilà le programme de test n°5 (j'ai menti ! Mais c'était pour la bonne cause

) ; dans ce programme, je vais créer deux objets
Personne et en sérialiser un en binaire et un autre en XML, puis je les détruirai pour ensuite en recréer deux autres à partir des fichiers binaire et XML (il est fou

).
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | public class TestSerialisation {
public static void main(String[] args) {
// SAUVEGARDE
/* Création et affichage de deux objets de type Personne */
Personne p1 = new Personne("Strife", "Clood", 21);
Personne p2 = new Personne("Gainsborough", "Aeris", 22);
p1.affichePersonne();
p2.affichePersonne();
/* Utilisation de la classe SauvegardeObjet */
SauvegardeObjet.sauverVersXML(p1, "Clood.xml");
SauvegardeObjet.serialiser(p2, "aeris.dat");
/* p1 et p2 ne référencent plus rien ! */
p1 = null;
p2 = null;
// CHARGEMENT
/* Création de deux objets Personne à partir de la classe SauvegardeObjet */
p1 = (Personne) SauvegardeObjet.chargerDepuisXML("cloud.xml");
p2 = (Personne) SauvegardeObjet.deserialiser("aeris.dat");
p1.affichePersonne();
p2.affichePersonne();
}
}
|
Alors ? Vous en pensez quoi ? Simple et efficace, non ? Rien ne vous empêche de la modifier, de toute façon.
Voilà, c'est déjà fini : vous êtes désormais capables de rendre vos applications plus dynamiques. Si vous avez besoin d'un coup de main (ou de pied, c'est vous qui voyez

), laissez-moi un commentaire dans la rubrique appropriée ou postez sur le forum java, vous ne pourrez pas me manquer.