Bonjour,
Si je crée un Vector<Point>, est-il possible de le dé/sérialiser en une fois ou bien faut-il dé/sérialiser chacun des objets point qu'il contient un par un ?
merci, je ne sais pas vérifier par moi même.
Version imprimable
Bonjour,
Si je crée un Vector<Point>, est-il possible de le dé/sérialiser en une fois ou bien faut-il dé/sérialiser chacun des objets point qu'il contient un par un ?
merci, je ne sais pas vérifier par moi même.
bonjour,
Le meilleur moyen c'est d'essayer, pour comprendre comment ca marche !
Tu sérialises dans un fichier ton vector et tu regardes le résultat.
Mais pour répondre à la question, lorsque tu vas sérialiser ton vector, il va écrire la définition de la classe, celle des valeurs, les variables de vector et les variables de Point dans un seul bloc.
Conclusion lorsque tu va dé-sérialiser ton vector il va tout chargé en une fois.
La classe Vector est Serializable, donc il doit être possible de la serialiser (et par conséquent son contenu).
A noter que la classe Point doit aussi être Serializable.
Edit : trop tard :aie:
Effectivement, le mieux, c'est d'essayer mais je ne sais pas vraiment...commencer, alors je n'ose vous le demander : serait-il possible d'avoir un exemple (très scolaire) de code ?
c'est pas de la lâcheté, j'ai fait des recherches pires que celle-là, mais ici, je plante!!!
Un exemple avec des String à la place des Point (si Point implémente Serializable c'est strictement pareil).
Code:
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 Vector<String> v = new Vector<String>(); v.add("azerty"); v.add("qsdfgh"); v.add("wxcvbn"); // Serialisation try { FileOutputStream fichier = new FileOutputStream("test.ser"); ObjectOutputStream oos = new ObjectOutputStream(fichier); oos.writeObject(v); fichier.close(); oos.close(); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } // Deserialisation try { FileInputStream fichierIn = new FileInputStream("test.ser"); ObjectInputStream ois = new ObjectInputStream(fichierIn); Vector<String> vDeser = (Vector<String>) ois.readObject(); fichierIn.close(); ois.close(); System.out.println(vDeser); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } catch(ClassNotFoundException e) { e.printStackTrace(); }
merci gailuris pour ton exemple de code , j'ai fait un petit prgramme de test
et à la compilation j'ai :
Note :serie2.java (nom du programme) uses unsafe or unchecked operations
Note : recompile with -Xlint:unchecked for details
(je comprend l'anglais) mais est-ce due à mon implémentation, voici mon programme :
merci pour ta patienceCode:
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 import java.io.*; import java.util.*; class Serie2 { public static void main(String argv[]) { Vector<String> v = new Vector<String>(); v.add("azerty"); v.add("qsdfgh"); v.add("wxcvbn"); // Serialisation try { FileOutputStream fichier = new FileOutputStream("test.ser"); ObjectOutputStream oos = new ObjectOutputStream(fichier); oos.writeObject(v); fichier.close(); oos.close(); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } // Deserialisation try { FileInputStream fichierIn = new FileInputStream("test.ser"); ObjectInputStream ois = new ObjectInputStream(fichierIn); Vector<String> vDeser = (Vector<String>) ois.readObject(); fichierIn.close(); ois.close(); System.out.println(vDeser); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } catch(ClassNotFoundException e) { e.printStackTrace(); } } }
C'est la ligne
qui provoque cet avertissement, le compilateur ne peut pas savoir au moment où il compile que readObject renvoi un Vector de String. Lis un peu à propos des Generics si tu veux mieux comprendre ce warning.Code:Vector<String> vDeser = (Vector<String>) ois.readObject();
Ce n'est donc pas du à ton implémentation (j'ai le même warning).
Pour ne plus avoir ce warnig tu peux ajouter un suppressWarnings juste avant la déclaration de la méthode :
Code:
1
2
3 @SuppressWarnings("unchecked") public static void main(String argv[]) { ...
merci beaucoup, en fait, je prépare un concours, je suis nouveau en java et c'est le langage que "paradoxalement", j'ai choisi, mais je vais réussir à m'y retrouver.
Pensez à regarder dans les les cours et tutoriels Java :arrow: voici un tutoriel sur La sérialisation binaire en Java ;)
Pensez également à toujours fermer vos flux dans des blocs finally ;).