Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1270 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  enregister un objet dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

enregister un objet dans un fichier

n°937138
dread_1337
Posté le 04-01-2005 à 18:55:47  profilanswer
 

Bonjour, je souhaite pouvoir enregistrer un objet grace à la serialisation.
voila mon code :
 
public void save(File f){
try {  
   FileOutputStream fichier = new FileOutputStream(f);
   ObjectOutputStream oos = new ObjectOutputStream(fichier);
   oos.writeObject(this);
   oos.flush();  
   oos.close();
}
catch (java.io.IOException e) {
e.printStackTrace();
}
}
 
ce code fonctionne trés bien pour des petits objets, mais qd je l'utilise sur un autre objet, l'erreur satckoverflow est levée !
 
Est ce que ceci pourrait venir d'une faite que je veut serialiser un objet1, qui contient un objet2, et que cette objet2 à un pointeur vers l'objet1 ??
 
Merci de votre aide

mood
Publicité
Posté le 04-01-2005 à 18:55:47  profilanswer
 

n°937147
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 04-01-2005 à 19:00:25  profilanswer
 

j'ai eu le souci récemment, j'ai trouvé ça comme explication (le dernier post)
 
http://groups.google.fr/groups?hl= [...] eb7&rnum=2

n°937182
phnatomass
Je m'empare de ton esprit !!
Posté le 04-01-2005 à 19:36:48  profilanswer
 

J'ai fait un test tout con pour sérialiser un objet contenant des références croisé comme une liste doublement chainé et effectivement cela lance un java.lang.StackOverflowError.
L'explication est donné dans le lien d'Harko
EDIT : J'ai raconté des conneries, mon stack overflow venait de mon implementation de la méthode toString  :fou:  
En fait la sérialisation se passe sans problême


Message édité par phnatomass le 04-01-2005 à 19:49:15
n°937190
the real m​oins moins
Posté le 04-01-2005 à 19:47:11  profilanswer
 

essayez xstream à l'occasion: ça marche bien, c'est hyper simple, et le resultat est lisible :)
 
(et dites ce que ça donne sur vos gros objets qui overflowent le stack)


Message édité par the real moins moins le 04-01-2005 à 19:47:51

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°937212
nraynaud
lol
Posté le 04-01-2005 à 20:15:57  profilanswer
 
n°937218
raytaller
Posté le 04-01-2005 à 20:23:43  profilanswer
 


bah... pourquoi  :??: ?
Moi je sérailise à fond en ce moment, et j'me disais qu'un moyen simple d'enregistrer des objets, ce serait la classe
 
ça m'plait bien ce truc à moi..

n°937220
the real m​oins moins
Posté le 04-01-2005 à 20:25:51  profilanswer
 

private joke, pas grave ;)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°937311
dread_1337
Posté le 04-01-2005 à 22:25:48  profilanswer
 

Ok merci à tous, je vais tout esseyer

n°937510
bobuse
Posté le 05-01-2005 à 10:07:58  profilanswer
 

je connaissais pas xstream :)
Ça tient la route ?

n°937622
the real m​oins moins
Posté le 05-01-2005 à 11:57:08  profilanswer
 

non c'est pour ça que je l'ai conseillé [:kiki]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 05-01-2005 à 11:57:08  profilanswer
 

n°937887
azubal
Posté le 05-01-2005 à 14:45:27  profilanswer
 

jai voulu tester XSTREAM qui a l'air pas mal du tout, seulement il semblerait que ca ne marche pas avec un Applet, ca genere un "AccessControlException: access denied" :(
si quelqu'un a reussi a faire marcher la librairie avec un applet. ca m'interresse..

n°937902
the real m​oins moins
Posté le 05-01-2005 à 14:54:31  profilanswer
 

la question à été soulevée y'a pas lgtps sur la mailing list, va jeter un oeil aux archives
http://archive.xstream.codehaus.org/user/


Message édité par the real moins moins le 05-01-2005 à 14:54:53

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°938354
raytaller
Posté le 05-01-2005 à 19:25:36  profilanswer
 

the real moins moins a écrit :

private joke, pas grave ;)


 
d'accord, ça me rassure merci pour la découverte en tous cas :)
 
 
(nraynaud je l'ai vu dire pas mal de trucs constructifs alors c'est vrai, je pense pas tout de suite à une blague)

n°938375
nraynaud
lol
Posté le 05-01-2005 à 19:35:43  profilanswer
 

raytaller a écrit :

(nraynaud je l'ai vu dire pas mal de trucs constructifs alors c'est vrai, je pense pas tout de suite à une blague)


tu couperas ça avant "alors" pendant le montage coco !

n°938418
the real m​oins moins
Posté le 05-01-2005 à 20:00:33  profilanswer
 

nraynaud a écrit :

tu couperas ça avant "tructifs" pendant le montage coco !


:jap:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°949141
Le Veilleu​r
Posté le 08-01-2005 à 14:14:37  profilanswer
 

une question qui est peut etre bete. on peut sauver plusieurs objets, de meme type bien sur, dans un meme fichier ?


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
n°949143
benou
Posté le 08-01-2005 à 14:15:55  profilanswer
 

oui, même si ils sont pas de même type ...


---------------
ma vie, mon oeuvre - HomePlayer
n°949150
Le Veilleu​r
Posté le 08-01-2005 à 14:37:20  profilanswer
 

benou a écrit :

oui, même si ils sont pas de même type ...


:)
Ma sauvegarde a l'air de bien fonctionner, maintenant je regarde comment recuperer l'ensemble de mes objets qui sont dans mon fichier. Car pour en recuperer un, ca a l'air simple, mais plusieurs ;)


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
n°949152
benou
Posté le 08-01-2005 à 14:39:21  profilanswer
 

while [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
n°949155
Le Veilleu​r
Posté le 08-01-2005 à 14:41:57  profilanswer
 


Code :
  1. try {
  2.        ObjectInputStream flotLecture = new ObjectInputStream( new FileInputStream("monfichier.txt" ));
  3.        Object lu = flotLecture.readObject();
  4.        if (lu instanceof operation)
  5.           {
  6.            operation temp=(operation)lu;
  7.   //ajouter l'option operation au vecteur
  8.   monVec.ajout(tmp);
  9.           }
  10.     }


 
intercaler un while avec un eof ?
operation c'est un objet à moi (je sais que le nom n'est pas génial ;))


Message édité par Le Veilleur le 08-01-2005 à 14:42:35

---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
n°949156
benou
Posté le 08-01-2005 à 14:44:37  profilanswer
 

while (in.available() != 0)


---------------
ma vie, mon oeuvre - HomePlayer
n°949160
Le Veilleu​r
Posté le 08-01-2005 à 14:47:42  profilanswer
 

benou a écrit :

while (in.available() != 0)


Code :
  1. try {
  2.        ObjectInputStream flotLecture = new ObjectInputStream( new FileInputStream("monfichier.txt" ));
  3.      
  4.    Object lu = flotLecture.readObject(); 
  5.    while (lu.available() != 0)
  6.      {
  7.      
  8.        if (lu instanceof operation)
  9.           {
  10.            operation temp=(operation)lu;
  11.   //ajouter l'option operation au vecteur
  12.   monVec.ajout(tmp);
  13.             }
  14.         lu = flotLecture.readObject();
  15.        }
  16.     }


 
je vais tester ca ;)


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
n°949165
benou
Posté le 08-01-2005 à 14:55:41  profilanswer
 

nan mais là non ... c'est l'inputstream qu'il faut tester avec available ... et le premier read faut le mettre dans la boucle aussi ...


---------------
ma vie, mon oeuvre - HomePlayer
n°949174
Le Veilleu​r
Posté le 08-01-2005 à 15:02:56  profilanswer
 

oups  :pt1cable:  
 

Code :
  1. //Permet de lire des objets et de les mettre dans le vecteur d'objets  
  2.  public void lireObjet()
  3.  {
  4. try {
  5.       ObjectInputStream flotLecture = new ObjectInputStream( new FileInputStream("objet.txt" ));
  6.      
  7.       //lecture du premier objet
  8.       Object lu ; 
  9.       while (flotLecture.available() != 0)
  10.           {
  11.            lu = flotLecture.readObject();
  12.            if(lu instanceof operation)
  13.              {
  14.               operation temp=(operation)lu;
  15.            //ajouter l'option operation au vecteur
  16.           ajout(temp);
  17.              }
  18.           }
  19.       }
  20.   catch (java.io.IOException e) {
  21.            e.printStackTrace();
  22.            }
  23.  }


 
Faut encore que je catch cette exception

Citation :

unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown


 
sur le  
 

Code :
  1. lu = flotLecture.readObject();


 
je garde espoir :D


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
n°949176
Le Veilleu​r
Posté le 08-01-2005 à 15:06:23  profilanswer
 

Code :
  1. catch (ClassNotFoundException e) {
  2.       e.printStackTrace();
  3.     }


 
je teste et croise les doigts :p car j'aurais presque fini :p


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
n°949202
Le Veilleu​r
Posté le 08-01-2005 à 15:28:42  profilanswer
 

Ca commence mal...
 
Il ne passe déjà pas la boucle
while (flotLecture.available() != 0)


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
n°949224
Le Veilleu​r
Posté le 08-01-2005 à 15:56:42  profilanswer
 

c'est vraiment pas beau ce que je viens de faire, mais ca fonctionne, j'ai fait un while(1==1) donc ca lit, et car ca plante, ca appele l'execption et sort de la boucle. c'est immonde, mais ca fonctionne :p


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
n°949227
benou
Posté le 08-01-2005 à 16:10:15  profilanswer
 

while(true) tant qu'à faire ...
 
c'est quoi le problème avec available ? c'est quoi le message d'erreur ?


---------------
ma vie, mon oeuvre - HomePlayer
n°949228
Le Veilleu​r
Posté le 08-01-2005 à 16:12:39  profilanswer
 

il ne fait pas de msg d'erreur avec available, il ne passe meme pas dans la boucle. Ce qui voudrait dire que flotLecture.available() == 0, ce qui me semble bizarre
 
quoique

Citation :

public int available()
              throws IOException
 
    Returns the number of bytes that can be read without blocking.


 
qu'est ce que veut dire blocking....


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
n°949237
benou
Posté le 08-01-2005 à 16:43:40  profilanswer
 

peut être que c'est juste utilisable pour les stream avec buffer :/
 
dans ce cas, je vois pas d'autre solution que de catcher EOFException pour savoir quand le flux est fini :/


---------------
ma vie, mon oeuvre - HomePlayer
n°949238
lorill
Posté le 08-01-2005 à 16:53:06  profilanswer
 

ben si, mettre le nombre d'objet de début de fichier, genre un Integer, et hop :o

n°949254
Le Veilleu​r
Posté le 08-01-2005 à 17:23:04  profilanswer
 

oui c'est moins sale, mais bon, pas génial non plus :( enfin comme ca c'est bon, je barratinerais le prof sur le sujet ;)
 
merci pour votre aide


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  enregister un objet dans un fichier

 

Sujets relatifs
objet out en jspEnregistrer dans un fichier un tableau de structure
problème avec fichier .htaccessSauvegarder/Lire des objets depuis un fichier
inclure un fichier xml dans un autre fichier xmlUtiliser un fichier .c dans mon programme avec QT designer
Proprietaire de fichierProtection de fichier
[ASP] Lecture inachevée d'un fichierStructure d'un fichier MP3
Plus de sujets relatifs à : enregister un objet dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR