Bonjour,
Je débute dans la sérialization et je voudrais sérialiser une ArrayList .
par exemple une classe classe1 qui va produire une liste A=[a,b,c] et utiliser cette liste dans une autre classe classe2
liste C= A
Version imprimable
Bonjour,
Je débute dans la sérialization et je voudrais sérialiser une ArrayList .
par exemple une classe classe1 qui va produire une liste A=[a,b,c] et utiliser cette liste dans une autre classe classe2
liste C= A
En regardant les tutoriels disponibles avant de poster tu gagnerais du temps :arrow: La sérialisation binaire en Java.
bonsoir voila j'ai lu le tutorial et j'ai essayé de créer un petit exempel mais ça fonctionne pas
j'ai deux classe C et D
la classe C contient une valeur float C=9; j'ai sérailizer cette valeur dans un fichier window.se
et je veux la récuperer dans la classe D
voila le code
classe D contient la valeur 9
et je cherche à récuperer la valeur dans la classe CCode:
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 package mustapha; import java.io.*; public class D { public D() { } public static void main(String[] args) { try { float C=9; FileOutputStream fos = new FileOutputStream("window.se"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeFloat(C); oos.flush(); oos.close(); System.out.println("Donnée sauvée: " +C); } catch (java.io.IOException e) { } } }
voila l'erreurCode:
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 package mustapha; import java.io.*; public class C { public C() { } public static void main(String[] args) { try { FileInputStream f = new FileInputStream("window.se"); ObjectInputStream o = new ObjectInputStream(f); float g = o.readFloat(); o.close(); System.out.println("Donnée actuelle : " + g); } catch(IOException o) { o.printStackTrace(); } } }
j'espere avoir une réponse merciCode:
1
2
3 java.io.FileNotFoundException: window.se (Le fichier spécifié est introuvable) at java.io.FileInputStream.open(Native Method)
j'ai modifié le code par
FileInputStream f = new FileInputStream("c:\\time.txt");
et
FileInputStream f = new FileInputStream("c:\\time.txt");
voila l'erreur
sur la ligne ObjectInputStream o = new ObjectInputStream(f);Code:
1
2
3
4
5
6
7 java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2165) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2631) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:734) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253) at mustapha.C.main(C.java:15)
meme fichier time ne contient rien
La méthode "readObject" de la classe "FileInputStream" renvoyant un Object (et non une ArrayList) il faut la caster.
Code:B = (ArrayList) o.readObject();
pour sérialiser il me semble que ta classe doit implémenter java.io.Serializable (suffit d'ajouter implements java.io.serializable dans le cas présent)
quand une classe doit etre ecrite oui ... quand elle se contente de lire ou d'ecrire d'autre type de donnee par forcement
genre si je fais new ObjectOutputStream(new FileOutputStream("out.ser").write(instancedemaclasse); et que instancedemaclasse n'implements pas Serializable a l'execution ca va faire drole lol
EDIT pour ulysse :
heu tu veux lire des float ou tu veux serialiser un arraylist ...?
car bon a lire un float dans un fichier j'utiliserais Scanner qui est moins penible a utiliser
salut
j'ai ajouté cette ligne
B = (ArrayList) o.readObject();
message d'erreruvous avez une idéeCode:"C.java": unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown at line 18, column 19
morceaux d'un de mes codesCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 try { ObjectInputStream in = new ObjectInputStream(this .getInputStream()); Message re = (Message) in.readObject(); if (re.getMessageType() == MessageType.IDENTIFICATION) um.identMessage(this, re); else um.messageReceived(re); } } catch (IOException e) { System.err.println("instance n��" + inst + " : Connection ferm��e"); um.closeConnection(this.getPseudo()); // e.printStackTrace(); } catch (ClassNotFoundException e) { System.err.println("instance n��" + inst + " :\n"); e.printStackTrace(); } }
si tu n'a pas compris reporte toi sur les exception
pour ecrire ce que je receptionne ici :
Code:
1
2
3
4
5
6
7
8
9
10
11
12 public void sendObj(Object Mess) { lock.lock(); try { ObjectOutputStream out = new ObjectOutputStream(getOutputStream()); out.writeObject(Mess); out.flush(); } catch (IOException e) { e.printStackTrace(); } finally { lock.unlock(); } }
sans oublier evidemment leCode:try{
merci c'est fais
mais ca fonctionne avec une arraylist...
la preuve je serialize une classe avec ca comme champ de classe :
et si tu regarde la source de arrayList tu vois :Code:
1
2
3 private Vector<Element> element = new Vector<Element>(); private ArrayList<ArrayList> vect;
or le java.io.Serializable implemente signifie que ta classe peut etre SerialiseCode:
1
2 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
donc en gros nous comprenons pas ton probleme malgre toute la bonne volonte que l'on y met
merci encore mais c'est quoi scaneur au lieu de sérialiser
attend je suis en traind e te faire un code d'exemple pour te montrer comment ca marche la serialization de ArrayList
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 /** * @param args */ public static void main(String[] args) { ArrayList liste = new ArrayList(); liste.add("test"); liste.add("serialisation"); System.out.println("Serialisation de la liste : "+liste); serialise(liste); ArrayList listeRetour = deserialise(); System.out.println("Deserialisation => "+listeRetour); } public static void serialise(ArrayList liste) { try { FileOutputStream fos = new FileOutputStream( "c:\\testSerialisation.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(liste); oos.flush(); oos.close(); } catch (FileNotFoundException e) { //Au cas ou on ne trouve pas le fichier e.printStackTrace(); } catch (IOException e) { //Au cas ou on n'arrive pas à écrire dans le fichier e.printStackTrace(); } } public static ArrayList deserialise() { ArrayList liste = null; try { FileInputStream f = new FileInputStream("c:\\testSerialisation.txt"); ObjectInputStream o = new ObjectInputStream(f); liste = (ArrayList) o.readObject(); o.close(); } catch (FileNotFoundException e) { //Au cas ou on ne trouve pas le fichier e.printStackTrace(); } catch (IOException e) { //Au cas ou on n'arrive pas à lire le fichier e.printStackTrace(); } catch (ClassNotFoundException e) { //Au cas ou on ne trouve pas de classe correspondant au contenu du fichier e.printStackTrace(); } return liste; }
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; public class test { public static void main(String[] args) { new test(); } public test() { ArrayList<String> ecris = new ArrayList<String>(); ecris.add("c"); ecris.add("tro"); ecris.add("simple"); try { ObjectOutputStream out; out = new ObjectOutputStream(new FileOutputStream("out.out")); out.writeObject(ecris); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out .println("le fichier out.out a ete ecris et contient le arrayList 'ecris' avec comme contenu :"); for (String s : ecris) System.out.println(s); System.out.println("nous allons maitnenant le relire"); try { ObjectInputStream in = new ObjectInputStream(new FileInputStream("out.out")); ArrayList<String> lu = (ArrayList<String>)in.readObject(); in.close(); System.out.println("ArrayList lu = " ); for(String s : lu) System.out.println(s); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
je voulais pas l'avoir fait pour rien lol
merci
résolu... ^^