Peut-on sérialiser une collection de type HashSet en java ?
Si oui comment procéder ?
Version imprimable
Peut-on sérialiser une collection de type HashSet en java ?
Si oui comment procéder ?
Bonjour,
HashSet implémente Serializable. Donc: http://java.sun.com/j2se/1.4.2/docs/...ializable.html
J'ai essayé d'adapter le code de ce
tuto
et je reçois le stack trace :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 public void serializeRetrait(){ try { // ouverture d'un flux de sortie vers le fichier "myRetrait.serial" FileOutputStream fos = new FileOutputStream("myRetraits.serial"); // création d'un "flux objet" avec le flux fichier ObjectOutputStream oos= new ObjectOutputStream(fos); try { // sérialisation : écriture de l'objet dans le flux de sortie oos.writeObject(myRetraits); // on vide le tampon oos.flush(); //System.out.println(myRetraits + " a ete serialise"); } finally { //fermeture des flux try { oos.close(); } finally { fos.close(); } } } catch(IOException ioe) { ioe.printStackTrace(); } }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 java.io.NotSerializableException: Retrait at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) at java.util.HashSet.writeObject(HashSet.java:254) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) at Distributeur.serializeRetrait(Distributeur.java:113) at JDRetrait$2.actionPerformed(JDRetrait.java:91)
La structure HashSet est elle même sérialisable, mais pour sérialiser un HashSet rempli d'objets il faut que tout ces objets soient eux même sérialisables. Ainsi, ton objet Retrait doit devenir sérialisable.
C'est bon j'avais oublié de sérialiser les autres classes qui composent la classe retrait, Distributeur, Carte et Compte.
Vous avez une astuce pour sérialiser plusieurs Set, la première idée qui m'est venue de la tête est un peu longue, une méthode (serializeNonSet()) pour chaque set ?