j’ai un petit problème quand j’essaie de créer un ObjectInputStream sur un FileInputStream.
Je crée le FIS, pas de problème : FIS.available() me renvoie des valeurs correctes, signe que le fichier n’est pas vide et qu’il est bien ouvert.
Mais lorsque je fais mon
ObjectInputStream OIS = new ObjectInputStream(FIS);
alors là, c’est le drame : OIS.available() me renvoie toujours zéro, et donc impossible de faire le moindre read* (où * == Char, à tout hasard) dedans…
Quelqu’un aurait-il une idée sur la cause du truc?
Bon, je suis susceptible de partir n’importe quand à partir de maintenant (fac power :/), donc si je réponds plus…(oui j’ose espérer trouver une réponse ici )
Merci d’avance!
(edit ortho) Ce message a été édité par EvilGuinness le 07/11/2003
[quote]C’est pour faire quoi ?
Et est ce que le fichier que tu essaies d’ouvrir contient bien des objets que tu as enregistre avec un ObjectOutputStream avant ?
Mais bon, perso je pense qu’utiliser la serialization c’est en general pas une super bonne idee .
Les objets ont bien été enregistrés via un ObjectOutputStream avant, pas de problème de ce côté-là.
Sinon, c’est la seule solution qu’on a trouvée…et encore, y’en a qui se sont mis à sérializer une table de hash pour gérer les index à côté…
ça ne règlera pas ton problème (zarbe au demeurant, vérifie bien tout de ton coté, normallement, ça colle , tu devrais faire commencer les noms de tes variables par des MINUSCULES.
[quote]Mais bon, perso je pense qu’utiliser la serialization c’est en general pas une super bonne idee [/quote]intéressant, tu pourrais argumenter un chouya ?..? Ce message a été édité par Tupperware_ass le 07/11/2003
En Java, si tu recompile une seule fois avec la serialization binaire par defaut, tes objets sont plus deserializable. Tu le sais ca ? Parceque c’est ptet pas ton probleme mais ca serait pas la premiere fois que je vois qqn se faire avoir par ce truc la. Changement de version de ton programme -> changement de serialization de tout tes objets. A moins que tu fasse des trucs specifiques.
PS: Serialization rulez, en Java pas mal moins qu’en C#, mais ca rulez quand meme. C’est juste que c’est pas aussi simple a utiliser que Serialize() si on veut que ca soit robuste.
[quote]En
Java, si tu recompile une seule fois avec la serialization binaire par
defaut, tes objets sont plus deserializable. Tu le sais ca
? Parceque c’est ptet pas ton probleme mais ca serait pas la premiere
fois que je vois qqn se faire avoir par ce truc la. Changement de
version de ton programme -> changement de serialization de tout tes
objets. A moins que tu fasse des trucs specifiques.[/quote]
Ouais, quand tu modifies une classe le serialVersionUid change, et tu ne peux plus deserializer des objets ayant l’ancien serialVersionUid.
On peux arranger ca en definissant la variable serialVersionUID a une valeur fixe (on peux connaitre l’actuelle en utilisant le programme serialver), et tant que tu ne fait qu’ajouter des trucs dans ta classe,ca ne pose pas de problème.
En fait j’ai oublié de preciser que je parlait de la serialization binaire. Le truc embetant c’est surtout quand tu enregistre ca dans des fichiers et que tu dois le réutiliser plus tard avec une nouvelle version du logiciel. Rien qu’en changeant de version de Java, ca pose des problème avec certaines classes qui ont changé de numero de serie (et qui sont donc incompatibles). Et vu que c’est un format binaire, les données sont difficilement utilisables dans un autre langage que le Java.
Enfin je dis ca par ce que justement j’ai à toucher à un logiciel qui abuse de la serialization binaire et sauvegarde pleins de trucs y compris des objet en swing dans une base de données, et ca pose quelques problèmes (mais je vais bientot changer tout ca).
me voilà de retour après un bon week-end sans java (et mine de rien, ça détend).
Pour les noms de variable, moui, je me souviens vaguement d’une phrase du prof, quelque chose comme “gnagnagna normes gnagnagna habitude gnagnagna variables en minuscule” mais je devais dormir (sérieux, c’est à rectifier effectivement, j’avais oublié, scusez).
Sinon, pour les histoires de version, je sais pas trop, vu que dans le programme on fait une écriture dans un fichier, puis aussitôt après, dans le même programme, une lecture des objets que l’on vient d’écrire (après avoir fermé tous les flux). En tout cas, je vais essayer, on verra bien.