Pb serialisation/déserialisation

anisotrope Messages postés 35 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 14 mars 2006 - 6 oct. 2004 à 22:46
anisotrope Messages postés 35 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 14 mars 2006 - 7 oct. 2004 à 18:51
Bonjour a tous
voila j'ai un probleme de serialisation/déserialisation :

je cree une reference a un objet Tab_3d : Tab_3d obj_tab_ref
La classe Tab_3d possede notament une variable d'instance A
je serialise obj_tab_ref dans "tab_3d.ser", si je deserialise par :

FileInputStream fis;

try {
fis = new FileInputStream("tab_3d.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
obj_tab_ref = (Tab_3d)ois.readObject();
ois.close();
} catch (Exception e1) {
e1.printStackTrace();
}

et que j'utilise le contenu de obj_tab_ref.A comme parametre d'une methode
ca marche.

PAR CONTRE si je veux mettre le qq lignes de la deserialisation dans une methode
de classe (pour gagner qq lignes) :

ecrit_donnee.Lect_Ser_Tab(obj_tab_ref,"tab_3d.ser");

j'ai un : java.lang.NullPointerException

ecrit_donnee est une instance de la classe Ecrit_donnee_fich :
Ecrit_donnee_fich ecrit_donnee = new Ecrit_donnee_fich();
La methode Lect_Ser_Tab contient les memes lignes qu'au dessus :

public boolean Lect_Ser_Tab(
Tab_3d obj_tab_ref, String fich_lect_ser) {

FileInputStream fis;
try {
fis = new FileInputStream(fich_lect_ser);
ObjectInputStream ois = new ObjectInputStream(fis);
obj_tab_ref = (Tab_3d) ois.readObject();
ois.close();
} catch (Exception e1) {
e1.printStackTrace();
}
return true;
}

Lorsque l'on veut serialiser et deserialiser des donnees y a t il de bonnes habitudes a avoir ? Cree t on des class dediees pour faire ca avec des methodes (static ou pas ?). Je debute alors ma facon de coder est encore un peu hesitante ;=)
Merci par avance pour les reponses :=)

PS : vive Eclipse hehe :=)

3 réponses

gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
7 oct. 2004 à 06:55
Je ne vois pas trop l'erreur (c'est le matin [;-)]) mais je te conseille de bannir les _ de tes noms de classes et de variables.

C'est très désagréable à lire, et peu pratique .

Renomme ta class en : Tab3d et ton String en fichLectSer, par exemple.

gmi19oj19
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
7 oct. 2004 à 09:58
:big) Neodante :big)

Je suis également d'accord avec gmi pour dire que les '_' sotn vraiment désagréable, la convention Java comme la convention C++ ne l'utilise pas (sauf début de variable ...) parce que c'est vraiment galère à lire et les yeux piques au bout de quelques minutes ...

M'enfin pour revenir à ton problème, je te dirais que c'est normal ... tu passes un pointeur en paramètre qui est null (ton objet n'est pas encore initialisé) et ensuite tu veux associer à ce pointeur qui est null (et donc qui n'existe pas !) un objet ... erreur d'exécution je comprends très bien, si tu ne passe pas un objet valide (autre que null) que ce soit en C++, en C ou en java tu auras toujours une erreur du même type ...

Pour faire ce sue tu dis fais :

public Object readSerialObject(String filename){
Object obj = null;
FileInputStream fis;
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename));
obj = ois.readObject();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}

Avec un petit cast au retour de la fonction :

Tab3D t3d = (Tab3D)toto.readSerialObject("toto.ser");

Voilà !
@+

[Responsable www.neogamedev.com]
0
anisotrope Messages postés 35 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 14 mars 2006
7 oct. 2004 à 18:51
Merci ca fonctionne !
Maintenant je petre deployer mon appli
0
Rejoignez-nous