Bonjour,
j'aimerai savoir la commande readObject creer une instance?
ou alors il faut créer d'abord une instance de l'objet et ensuite faire un readObject?
merci
Version imprimable
Bonjour,
j'aimerai savoir la commande readObject creer une instance?
ou alors il faut créer d'abord une instance de l'objet et ensuite faire un readObject?
merci
bonjour,
Je ne comprends pas bien ta question.
Si tu veux récupérer un objet qui à été enregistré avec la méthode
writeObject, il faut utiliser la méthode readObject de la classe ObjectInputStream. Par contre, pour enregistrer un objet, il faut qu'il implémente l'interface Serializable.
Précise ta question si j'ai répondu à côté.
ca je suis ok.
voici ce que je fait
pour récuperer je fais caCode:
1
2
3
4
5
6
7
8
9 Essai d = new Essai(200.5, 1,"anticonstitutionnellement"); for (int i = 0 ; i < 10000; i++) { fich.writeObject(d); et j'incremente le int de d }
mon probléme c'est lorsque je récupère , je récupère toujours la même chose et même si j'aggrandie ma boucle, il ne fait même d'erreurCode:
1
2
3
4
5 Essai coco; for (int i = 0 ; i < 10000; i++) coco = (Essai)fich2.readObject();
qu'est ce que je fais ou pas qui soit pas bien?
re,
Bon, j'ai fais des tests, et j'obtiens pareil que toi, il ne change pas mon int !!!
Par contre, quand j'agrandie ma boucle, il me fait bien une erreur
EOFException, ce qui indique qu'il inscrit plusieurs objets et qu'il en lit plusieurs (c'est déjà ça). Reste à savoir pourquoi il ne veut pas changer ce int.
Bon,
il fait la même connerie avec les Integer.
Il faut recréer un objet à chaque fois.
ce code fonctionne :
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 public class TestSerial implements Serializable{ public static void main(String[] args) { TestSerial ts = new TestSerial(); } public TestSerial() { try { // écriture ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.ser")); Serial d = new Serial(3); for(int i=0; i<1000; i++) { oos.writeObject(d); d = new Serial(d.getD()+1); } oos.close(); // lecture ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.ser")); for (int i=0; i<1000; i++) { Serial f = (Serial)ois.readObject(); System.out.println(f.getD()); } ois.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public class Serial implements Serializable { private Integer d; public Serial(int d) { this.d = new Integer(d); } public void setD(int d) { this.d = new Integer(d); } public int getD() { return this.d.intValue(); } } }
merci,
comment je peux lui remplacer mon for pour un tant que je n'ai pas atteint la fin de mon fichier
y a-til une méthode? si oui laquelle merci
bonjour,
tu as la méthode availble pour savoir combien d'octets tu peux lire,
mais pour cela, il faut que tu saches combien d'octets prend ton objet.
Sinon tu peux faire
bon courageCode:
1
2
3
4
5
6 try { boucle for catch(EOFException e) { on est à la fin du fichier }
et comment je sais combien d'octet mon objet fait?
ben justement, c'est bien ça le problème.
utilises la deuxième solution.
A moins que quelqu'un trouve mieux.
Note :
tu as peut-être un moyen de savoir combien d'octets ton objet fais. Tu l'écris dans un fichier avec writeObject et après tu regarde combien pèse ton fichier, ça doit être le nombre d'octets de ton objet. Mais cette méthode est nulle.
mais ma boucle for jusqu'a ou la faire je ne connait pas le nombre d'enregistrement
bien sûr,
Mais lorsque tu vas essayer de lire un enregistrement alors que tu ais à la fin de ton fichier, la MV va lancer une EOFException. Tu vas donc passer dans ton catch. A partir de là, tu sais que tu as lu tous les enregistrements.
j'espère que tu m'as compris.