Bonsoir,
Voila ma situation est la suivante, j'ai un vector d'objets "Case" et cet objet contient lui même un attribut vector "figure" et j'aimerai serialiser le vector de "Case" dans un XML, j'utilise donc la classe XMLEncoder et XMLDecoder, je sauvegarde mon vector d'objets "Case" et le contenu s'inscrit bien dedans, jusque là pas de problème, seulement il y a des petites imperfections comme le fait que tout le contenu de mon vector attibut "figure" n'est pas indiqué il manque certains index à chaque fois ce qui me provoque un résultat en petite parti éroné et je ne comprend pas pourquoi.
Pour être plus clair je vous fourni le code et son résultat:
Jeton.java
Case.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package test; import java.util.Arrays; import java.util.Random; import java.util.Vector; public class Jeton { private Vector<String> formes = new Vector<String> (Arrays.asList ("triangle", "carre", "pentagone")); private Vector<String> couleurs = new Vector<String> (Arrays.asList ("rouge", "jaune", "vert", "bleu")); private Integer symbole = new Random ().nextInt (5) + 1; public Vector<String> hasard () { Vector<String> figure = new Vector<String> (); figure.add (this.formes.get ((int)(Math.random () * this.formes.size ()))); figure.add (this.couleurs.get((int)(Math.random () * this.couleurs.size ()))); figure.add (this.symbole.toString ()); return figure; } }
Sauvegarde.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package test; import java.util.Vector; public class Case { Vector<String> figure = new Vector<String> (); public Case () { this.figure = this.jeton.hasard (); } public String toString () { return "forme: " + this.figure.get (0) + " couleur: " + this.figure.get (1) + " symbole: " + this.figure.get (2); } public Vector<String> getFigure () { return this.figure; } public void setFigure (Vector<String> figure) { this.figure = figure; } }
Le main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 package test; import java.beans.XMLEncoder; import java.io.FileOutputStream; import java.beans.XMLDecoder; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public final class SauvegardeObjet { public static void sauverVersXML(Object objet, String fichier) { System.out.println (fichier); try { XMLEncoder enc = new XMLEncoder(new FileOutputStream(fichier)); try { enc.writeObject(objet); enc.flush(); } finally { enc.close(); } } catch (FileNotFoundException e) { e.printStack (); } } public static Object chargerDepuisXML(String fichier) { System.out.println (fichier); Object retour = null; try { XMLDecoder dec = new XMLDecoder(new FileInputStream(fichier)); try { retour = dec.readObject(); } finally { dec.close(); } } catch (FileNotFoundException e) { e.printStack (); } return retour; } }
Le fichier Test.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 package test; import java.util.Vector; public class TestSerial { public static void main (String[] args) { Vector<Case> tabCas = new Vector<Case> (); Vector<Object> tabCas2 = new Vector<Object> (); Case c1 = new Case (); Case c2 = new Case (); Case c3 = new Case (); Case c4 = new Case (); tabCas.add (c1); tabCas.add (c2); tabCas.add (c3); tabCas.add (c4); System.out.println (Initialisation:); System.out.println (tabCas.get (0)); System.out.println (tabCas.get (1)); System.out.println (tabCas.get (2)); System.out.println (tabCas.get (3)); SauvegardeObjet.sauverVersXML (tabCas, "C:\\Users\\scary\\Desktop\\Test.xml"); tabCas2 = (Vector<Object>)SauvegardeObjet.chargerDepuisXML("C:\\Users\\scary\\Desktop\\Test.xml"); System.out.println (Resultat:); System.out.println (tabCas2.get (0)); System.out.println (tabCas2.get (1)); System.out.println (tabCas2.get (2)); System.out.println (tabCas2.get (3)); } }
Le resultat (vous pouvez voir que l'affichage initial et le resultat de la 3ème ligne ne correspondent pas)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?xml version="1.0" encoding="UTF-8"?> <java version="1.6.0_16" class="java.beans.XMLDecoder"> <object class="java.util.Vector"> <void method="add"> <object class="test.Case"> <void property="figure"> <void index="0"> <string>triangle</string> </void> <void index="1"> <string>vert</string> </void> <void index="2"> <string>3</string> </void> </void> </object> </void> <void method="add"> <object class="test.Case"> <void property="figure"> <void index="0"> <string>triangle</string> </void> <void index="2"> <string>5</string> </void> </void> </object> </void> <void method="add"> <object class="test.Case"> <void property="figure"> <void index="1"> <string>jaune</string> </void> </void> </object> </void> <void method="add"> <object class="test.Case"> <void property="figure"> <void index="0"> <string>triangle</string> </void> <void index="1"> <string>bleu</string> </void> <void index="2"> <string>5</string> </void> </void> </object> </void> </object> </java>
Voila j'espere avoir été clair, Merci d'avance à vous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Initialisation: forme: triangle couleur: vert symbole: 3 forme: triangle couleur: bleu symbole: 5 forme: pentagone couleur: jaune symbole: 1 forme: triangle couleur: bleu symbole: 5 Resultat: forme: triangle couleur: vert symbole: 3 forme: triangle couleur: bleu symbole: 5 forme: triangle couleur: jaune symbole: 2 forme: triangle couleur: bleu symbole: 5![]()
Partager