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

  FORUM HardWare.fr
  Programmation
  Java

  [Java]Exception StreamCorrupted

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java]Exception StreamCorrupted

n°709843
airv3
Des mecs com lui y en a pas 2
Posté le 27-04-2004 à 15:55:13  profilanswer
 

:hello: messieurs, je réalise le jeu du Taquin et je m'occupe maintenant de la gestion du classement et c'est la que mon problème survient...
J'ai crééer une Classe Classement(String nom et int Score) qui est sérializable
Lorsque que la partie est fini un dialog s'ouvre pour le nom du joueur et je construit mon instance de classement avec ce nom et je le sauvegarde à la suite de mon fichier

Code :
  1. FileOutputStream fichier = new FileOutputStream("top.cla",true);
  2. ObjectOutputStream oos = new ObjectOutputStream(fichier);
  3. nouveau = new Classement(name,userScore);
  4. oos.writeObject(nouveau);
  5. oos.flush();
  6. oos.close();


 
Ensuite dans une autre fonction je ve relire mon fichier pour kil m'affiche les instances sauvegarder ;

Code :
  1. try{
  2. System.out.println("Lecture du fichier..." );
  3. FileInputStream fichier = new FileInputStream(fileName);
  4. ObjectInputStream ois = new ObjectInputStream(fichier);
  5.     while (i < 15){
  6. top[i] = (Classement)ois.readObject();
  7. System.out.println("i = "+i+"; "+top[i]);
  8. i++;
  9.     }


 
Mais le pb c'est que je ne recupère que le premier Objet ensuite j'ai une

Code :
  1. java.io.StreamCorruptedException


 
Quelqu'un aurait une idée??
Merci d'avance

mood
Publicité
Posté le 27-04-2004 à 15:55:13  profilanswer
 

n°709876
benou
Posté le 27-04-2004 à 16:11:16  profilanswer
 

[:wam]  
 
tu mets 1 objet dans le fichier, tu essayes ensuite d'en lire 15 ...
Et bizarrement, tu n'arrives à en lire qu'un ...
 
Qu'est ce qui pourrait expliquer ce comportement étrange [:meganne]


---------------
ma vie, mon oeuvre - HomePlayer
n°709883
airv3
Des mecs com lui y en a pas 2
Posté le 27-04-2004 à 16:14:14  profilanswer
 

benou a écrit :

[:wam]  
 
tu mets 1 objet dans le fichier, tu essayes ensuite d'en lire 15 ...
Et bizarrement, tu n'arrives à en lire qu'un ...
 
Qu'est ce qui pourrait expliquer ce comportement étrange [:meganne]


non mais ca c pas le pb t'inkiete je catch mon EOF comme ca ne me pose pas de pb ;)
mais en fait la StreamCorruptedException qui pose pb, même en regardant la JAvadoc je comprend pas d'ouvien cette erreur...

Citation :

StreamCorruptedException : Thrown when control information that was read from an object stream violates internal consistency checks.


 
edit : deplus lorsque j'ecrit pour la première fois dans le fichier g pas le pb par contre, c'est quand je met une instance à la  fin de mon fichier que ca merdouille [:iznogoud_23]


Message édité par airv3 le 27-04-2004 à 16:16:32
n°709903
airv3
Des mecs com lui y en a pas 2
Posté le 27-04-2004 à 16:26:33  profilanswer
 

no idea? :'(

n°710142
airv3
Des mecs com lui y en a pas 2
Posté le 27-04-2004 à 19:05:39  profilanswer
 

tjs pas d'ame charitable pour m'aider ?

n°710167
benou
Posté le 27-04-2004 à 19:44:20  profilanswer
 

ben tu nous dis surement pas tout parce que ce genre d'exception est pas sensée ce produire ... en tout cas, pas avec un code aussi simple que le tiens ...
 
c'est 2 jvm séparées qui écrivent et qui lisent ? les fichier sont manipulés entre temps ? ils ont la même version des .class ?


---------------
ma vie, mon oeuvre - HomePlayer
n°710186
airv3
Des mecs com lui y en a pas 2
Posté le 27-04-2004 à 20:05:41  profilanswer
 

ben c la même JVM car meme machine, je verifie de fermer mes fichiers avt de les ouvrir, enfin je me debrouille en JAVA g demandé à un pote à moi qui fait que du java depuis des années et lui même de ne voit pas d'ou çà vient... :'(
le code ki y a autour de ce ke je vous ai donné n'influe pas sur les bout de code car il n'y a  aucune manip de fichier?

n°710210
benou
Posté le 27-04-2004 à 20:28:39  profilanswer
 

les mêmes fichiers .class qui sont utilisés par le code qui écrit et qui lit ?
 
c'est dans quel cas que tu as le prob ?
dès que tu écris 2 objets et qeu tu essaye de les lire tous les deux ?
 
tu as essayé d'isolé le problème en faisant un prog qui fait juste ca ?


---------------
ma vie, mon oeuvre - HomePlayer
n°710227
lorill
Posté le 27-04-2004 à 20:40:54  profilanswer
 

montre voir le code complet de Classement

n°1240353
didier1809
${citation_perso}
Posté le 07-11-2005 à 13:42:37  profilanswer
 

up ?  :whistle:  
 
J'ai exactement le meme problème  :(


---------------
.
mood
Publicité
Posté le 07-11-2005 à 13:42:37  profilanswer
 

n°1240432
moi23372
Posté le 07-11-2005 à 14:38:05  profilanswer
 

pkoi tu ne peux sérialiser un vecteur d'objet, comme ça tu n'aurais qu'a un objet à lire et à écrire, et ensuite faire l'oppération en mémoire qui est nettement plus rapide. Enfin mio c'est tjs comme ça que je procède

n°1240447
didier1809
${citation_perso}
Posté le 07-11-2005 à 14:46:03  profilanswer
 

Bonne idée, mais voiçi ce que j'aimerai faire :
 
Ecrire un objet dans le fichier, faire des traitement, donc fermer le programme, réecrire un objet, les lire opur en trouver un, ...
 
Pas commode à implémenter dans un vecteur :(
 
J'ai fait quelques recherches sur le net, et apparrement, il y a de gros problèmes quand on fait :
- ouvrir stream
- ecrire
- fermer
- ouvrir stream
- ecrire
- fermer
 
:(


---------------
.
n°1240468
souk
Tourist
Posté le 07-11-2005 à 15:00:26  profilanswer
 

xstream ? :whistle: ?

n°1240477
didier1809
${citation_perso}
Posté le 07-11-2005 à 15:04:15  profilanswer
 

Explique ?


---------------
.
n°1240480
souk
Tourist
Posté le 07-11-2005 à 15:06:33  profilanswer
 

http://xstream.codehaus.org/
c'est une lib pour serialiser/deserialiser des objets, c'est tout simple et tres pratique

n°1240517
didier1809
${citation_perso}
Posté le 07-11-2005 à 15:29:19  profilanswer
 

MErci, mais juste un truc, comment je m'en sert ? j'ai pas tout pigé apparement...
 
J'ai copié les 2 . jar dans le dossier des sources, mais quand je met : XStream ... il (eclipse) ne le reconnais pas


---------------
.
n°1240523
TheRom_S
Posté le 07-11-2005 à 15:38:35  profilanswer
 

problème de classpath : rajoute les .jar dans les options de ton projet


---------------
The Rom's, à votre service
n°1240799
didier1809
${citation_perso}
Posté le 07-11-2005 à 21:02:51  profilanswer
 

Tant que j'y suis :
 
J'ai bien reussi a écrire/lire grace à xstream, mais pour la lecture, j'en suis arrivé à un truc assez moche, ou je lis ligne par ligne, jusqu'a tomber sur la balise de fin de ma classe, je met toutes les lignes dans un string, que je retransforme en Objet par apres.
 
La phase "je lis ligne par ligne ...", ne me plait pas vraiment, il n'y a pas un moyen + simple ?
 
merci


---------------
.
n°1240837
souk
Tourist
Posté le 07-11-2005 à 21:42:26  profilanswer
 

euh, t'as pas a faire tout ca hein, le mieux c'est de serialiser une liste de tes objets [:dawa]
 
et tu deserializes une liste aussi, tu laisses xstream tout faire pour toi [:joce]
 
List trucListe;
//tu mets tes objets dedans
XStream xstream = new XStream(); (si je me souviens bien)
String listeSerializee = xstream.toXml(trucList);
 
 
et apres:
 
List truc = xstream.fromXml( soit une string, soit une inputStream )
 
et ta liste contient tes objets :)

n°1240863
masklinn
í dag viðrar vel til loftárása
Posté le 07-11-2005 à 22:20:44  profilanswer
 

Quel est l'intérêt de passer par un serializer spécial alors que ObjectInputStream et ObjectOutputStream gèrent aussi bien les ArrayList que les arrays classiques (Object[]) [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1240926
souk
Tourist
Posté le 07-11-2005 à 23:17:03  profilanswer
 

bah c'est plus simple a utiliser, ca impose moins de contraintes sur les objets a serialiser (aucune en fait [:joce]) et puis c'est vachement in/rebelz/fashion [:pingouino]

n°1240935
masklinn
í dag viðrar vel til loftárása
Posté le 07-11-2005 à 23:28:37  profilanswer
 

souk a écrit :

bah c'est plus simple a utiliser, ca impose moins de contraintes sur les objets a serialiser (aucune en fait [:joce]) et puis c'est vachement in/rebelz/fashion [:pingouino]


Il y en a quand même pas lourd de contraintes sur les Object*Stream, et j'ai du mal à voir en quoi c'est dûr à utiliser [:pingouino]
 
En plus la serialisation XML, voila quoi [:pingouino]

Message cité 1 fois
Message édité par masklinn le 07-11-2005 à 23:29:55

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1240948
the real m​oins moins
Posté le 07-11-2005 à 23:50:26  profilanswer
 

masklinn a écrit :

Il y en a quand même pas lourd de contraintes sur les Object*Stream, et j'ai du mal à voir en quoi c'est dûr à utiliser [:pingouino]
 
En plus la serialisation XML, voila quoi [:pingouino]


 
1/ ton "flux" est lisible. i.e, si tu passes par exemple par un systeme de messagerie, tu peux voir tes messages, au lieu de voir un caca binaire qui ne veut rien dire.
2/ avant de pingouiner dans le vide, fais des tests, ou à defaut va lire les benchs.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1240953
masklinn
í dag viðrar vel til loftárása
Posté le 07-11-2005 à 23:55:31  profilanswer
 

the real moins moins a écrit :

1/ ton "flux" est lisible. i.e, si tu passes par exemple par un systeme de messagerie, tu peux voir tes messages, au lieu de voir un caca binaire qui ne veut rien dire.


Ici le monsieur veut stocker des classements, les chances qu'il ait besoin de les relire avec une autre application sont faibles, qu'il ait besoin de les relire dans une autre application non codée en java le sont encore plus, et l'intérêt qu'un humain puisse lire et modifier les infos directement est -- je trouve -- peu ou prou inexistant pour le programmeur...

Citation :

2/ avant de pingouiner dans le vide, fais des tests, ou à defaut va lire les benchs.


Là on parlait de la difficulté à utiliser le mécanisme de sérialisation et des contraintes dues au mécanisme, que viennent y foutre des benchs [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1240954
the real m​oins moins
Posté le 07-11-2005 à 23:57:11  profilanswer
 

1/ ben tiens. j'utilise xstream pour stocker la config d'une petite appli que j'utilise tout seul. j'ai été bien content à plusieurs reprises de la grep-er ou de la corriger à coup de vi.
 
2/ c'était en réponse à "En plus la serialisation XML, voila quoi pingouino"


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1240955
masklinn
í dag viðrar vel til loftárása
Posté le 07-11-2005 à 23:59:50  profilanswer
 

the real moins moins a écrit :

1/ ben tiens. j'utilise xstream pour stocker la config d'une petite appli que j'utilise tout seul. j'ai été bien content à plusieurs reprises de la grep-er ou de la corriger à coup de vi.


Super, sauf qu'il ne sérialise pas un fichier de configuration il sérialise un classement d'un jeu de taquin, c'est pas exactement la même situation hein...

Citation :

2/ c'était en réponse à "En plus la serialisation XML, voila quoi pingouino"


Et alors?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1240956
the real m​oins moins
Posté le 08-11-2005 à 00:02:16  profilanswer
 

bon, tu voulais dire quoi, avec ton pingouino, alors ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1240960
masklinn
í dag viðrar vel til loftárása
Posté le 08-11-2005 à 00:06:37  profilanswer
 

the real moins moins a écrit :

bon, tu voulais dire quoi, avec ton pingouino, alors ?


Citation :

"Some people, when confronted with a problem, think “I know, I’ll use XML.” Now they have two problems."


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1240962
the real m​oins moins
Posté le 08-11-2005 à 00:08:08  profilanswer
 

boah, en l'occurence, t'utilises pas xml, tout est caché dans xstream, cfr le bout de code de souk. 1 ligne pour serializer. 1 ligne pour deserializer. (d'ailleurs tu peux serialiser dans un autre format qu'xml, le point etant que ça reste plus lisible ET plus simple à utiliser que la serialization java)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1240988
didier1809
${citation_perso}
Posté le 08-11-2005 à 06:19:12  profilanswer
 

Pour repondre en gros à tout le monde :
 
Avec les Write/readObject, ca ne me semble pas super prévu pour la sauvegarde sur fichier, a part sauver totu dans une array, pour la lire ou l'ecrire, on ne peut pas faire grand chose, et cela me semblai peu optimal de devoir mettre tout mes objet à sauver dans une array...
 
Avec le Xml, je peut utiliser ma sauvegarde classiquement, en fait, je m'en fout un peu de pouvoir le relire en "texte" par apres...
 
 
Mais je ferai 2 version de ce ptit prog, une avec XML, une avec les ReadObject, je verrai bien laquelle me plait le plus :D


---------------
.
n°1241069
masklinn
í dag viðrar vel til loftárása
Posté le 08-11-2005 à 11:14:29  profilanswer
 

didier1809 a écrit :

Pour repondre en gros à tout le monde :
 
Avec les Write/readObject, ca ne me semble pas super prévu pour la sauvegarde sur fichier, a part sauver totu dans une array, pour la lire ou l'ecrire, on ne peut pas faire grand chose, et cela me semblai peu optimal de devoir mettre tout mes objet à sauver dans une array...


Heuuu ton classement machin là il n'est pas chargé en mémoire dans un array (ou un truc qui y ressemble, map par exemple) en début de partie [:petrus dei]
(et Object*Stream, comme xstream, permet de sérialiser peu ou prou n'importe quel objet (enfin avec O*S il faut qu'il soit sérialisable), je vois pas ce que le "a part sauver tout dans une array" vient foutre ici)


Message édité par masklinn le 08-11-2005 à 11:16:14

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1241128
didier1809
${citation_perso}
Posté le 08-11-2005 à 12:18:28  profilanswer
 

Et si je ferme mon prog [:mouais] ?


---------------
.
n°1241136
masklinn
í dag viðrar vel til loftárása
Posté le 08-11-2005 à 12:47:37  profilanswer
 

didier1809 a écrit :

Et si je ferme mon prog [:mouais] ?


Tu sérialises ton classement à la fermerture et tu désérialise à l'ouverture [:mlc]
 
Tu peux même sérialiser à chaque modification du classement si ça t'amuse [:mlc]
 
Surtout qu'avoir une structure de classement complète te permet de faire des tris propres [:spamafote]


Message édité par masklinn le 08-11-2005 à 13:33:30

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1241440
didier1809
${citation_perso}
Posté le 08-11-2005 à 17:06:06  profilanswer
 

C'est pour éviter que si mon vecteur comporte 300 elements, je ne doive les stocker en memoire alors que j'en aurais peut etre pas besoin ...


---------------
.
n°1241453
masklinn
í dag viðrar vel til loftárása
Posté le 08-11-2005 à 17:14:38  profilanswer
 

didier1809 a écrit :

C'est pour éviter que si mon vecteur comporte 300 elements, je ne doive les stocker en memoire alors que j'en aurais peut etre pas besoin ...


Comment dire...
 
Vu la place que prend une ArrayList (quel intérêt d'utiliser un vecteur [:petrus dei]) de 300 petits objets en mémoire (ça doit être de l'ordre de 5ko au grand maximum pour l'estimation supérieure avec des objets de taille respectables...) par rapport à ce qui est bouffé par la VM, je m'inquiéterais pas trop.
 
Et si on compare ça avec les ressources et le temps nécessaires pour faire tes joujous dans des fichiers, c'est un ou deux ordres de grandeur plus efficaces et moins bordélique (donc moins source de bugs et comportements illogiques) [:djmb]  
 
Sans compter qu'un classement, il arrive souvent que ce soit trié, et trier un conteneur implémentant une List est trivial.
 
Enfin, tes données seront simplement stockées en continu au lieu d'être stockées temporairement (donc auront leur emplacement stable au lieu de créer des allocations et désallocations à chaque fois que tu auras besoin d'afficher les scores...)


Message édité par masklinn le 08-11-2005 à 17:15:42

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1241715
didier1809
${citation_perso}
Posté le 08-11-2005 à 20:46:47  profilanswer
 

MErci pour cette belle explication :jap:
 
Pour moi vecteur est un terme generique, donc ici, en java, je prend une ArrayList, ou une autre collection au cas ou.
 
J'etait persuadé que cele prenait beaucoup plus de place en mémoire, mais la, effectivement, je ne vais pas me faire chier avec ce que jepensait, je vais directement mettre tout dans une collection :o


---------------
.
n°1241740
masklinn
í dag viðrar vel til loftárása
Posté le 08-11-2005 à 21:06:48  profilanswer
 

didier1809 a écrit :

Pour moi vecteur est un terme generique, donc ici, en java, je prend une ArrayList, ou une autre collection au cas ou.


Ah oui mais non, en Java un vecteur ça sera assimilé à l'objet Vector (java.util.Vector), donc une liste spécifique (c'est équivalent à ArrayList mais "thread safe", ça n'a aucun intérêt dans ton cas et ça a 30% à 50% de perfs en moins)

Citation :

J'etait persuadé que cele prenait beaucoup plus de place en mémoire


À part de très très gros objet, 300 objets dans un array c'est pas grand chose hein [:pingouino]

Citation :

je vais directement mettre tout dans une collection :o


Une List, un objet implémentant l'interface Collection n'est pas nécessairement ordonné, un objet implémentant l'interface List l'est (et List est dérivée de Collection) :o

Message cité 1 fois
Message édité par masklinn le 08-11-2005 à 21:07:32

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1241818
the real m​oins moins
Posté le 08-11-2005 à 22:16:53  profilanswer
 

masklinn a écrit :

ça a 30% à 50% de perfs en moins


ptain mais l'vieux fud [:mlc] sources, qu'on rigole un coup ? [:ula]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1241847
masklinn
í dag viðrar vel til loftárása
Posté le 08-11-2005 à 22:26:05  profilanswer
 

the real moins moins a écrit :

ptain mais l'vieux fud [:mlc] sources, qu'on rigole un coup ? [:ula]


J'essaie de les retrouver
 
Bon... premier lien, un test de perfs de Bruce Eckel n'indiquant aucune différence entre les deux (si je lis correctement les résultats)
 
Et un autre sur OnJava expliquant que la différence existait pour les anciennes VM mais n'existe plus

Citation :

The main difference between the Vector class and the ArrayList class is the use of synchronization. Apart from two methods used only during serialization, none of the ArrayList methods are synchronized; in contrast most of the Vector methods are synchronized directly or indirectly. Consequently Vector is thread-safe, and ArrayList isn't. This makes ArrayList faster than Vector. For some of the latest JVMs the difference in speed between the two classes is negligible: strictly speaking, for these JVMs the difference in speed between the two classes is less than the variation in times obtained from tests comparing the performance of these classes.


 
Encore un

Citation :

Second, yes that's basically it; ArrayList and Vector are functionally
identical. Their performance is not even likely to be all that
different. There are a couple reasons to choose ArrayList over Vector,
though [...]


Message édité par masklinn le 08-11-2005 à 22:35:12

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1241855
the real m​oins moins
Posté le 08-11-2005 à 22:29:06  profilanswer
 
mood
Publicité
Posté le   profilanswer
 


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

  [Java]Exception StreamCorrupted

 

Sujets relatifs
[Java] Collections.synchronizedList[JAVA ]utilisation de la classe Vector
[java] problème avec la précision des nombres réels[Java] Comment faire un splash screen ?
[Java] Boite de dialogue standard[JAVA] [JDBC] exception sur executeUpdate(...)
Peux-ton faire des pointeur de fonction en java ?Aide code java.
if simplifié en java 
Plus de sujets relatifs à : [Java]Exception StreamCorrupted


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