Problème lors de la désérialisation de plusieurs objets
Bonjour,
En me basant sur le code fournit dans la Faq java, j'ai écrit une classe me permettant de sérialiser un objet de ma classe que j'ai appelée DFConnexion.
Je tiens à préciser que le code fournit dans la faq permet la sérialisation d'un seul objet et la désérialisation de celui-ci. or moi je souhaite ajouter au fur et à mesure dans la fichier de sorti des objets, et lors de la désérialisation, parcourir le fichier à la recherche de chacun d'eux que je stocke au fur et à mesure dans une List qui sera retournée.
voici les 2 méthodes associées :
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
|
/*** SERIALISATION DE L'OBJET DFCONNEXION ***/
public void ecritObjDsFichier(DFConnexion con, String nomfichier) throws Exception{
FileOutputStream fos = new FileOutputStream(nomfichier,true); //fichier de sortie
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject((Object)con);
oos.flush();
oos.close();
}
/*** DESERIALISATION DE L'OBJET DFCONNEXION ***/
public List litObjDsFichier(String nomfichier) throws Exception{
List listeConnexions= new ArrayList();
DFConnexion obj = new DFConnexion();
FileInputStream fis = new FileInputStream(nomfichier);
ObjectInputStream ois = new ObjectInputStream(fis);
obj=(DFConnexion)ois.readObject();
while(obj!=null){
listeConnexions.add(obj);
obj=(DFConnexion)ois.readObject();
}
ois.close();
return listeConnexions;
} |
La sérialisation a bien marché. Le problème maintenant c'est que lors de la désérialisation, j'ai une erreur que je ne comprend pas :
mon main :
(DFFichier est le nom de la classe)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public static void main(String[] args) {
DFConnexion con = new DFConnexion();
DFFichier dff1 = new DFFichier();
try{
List listeCon = dff1.litObjDsFichier("serie.cnx");
for(int i=0; i<listeCon.size(); i++){
con=(DFConnexion)listeCon.get(i);
System.out.println("serveur "+i+" "+con.getDfSrv());
}
System.out.println("Succes de l'operation");
}catch(Exception e){e.printStackTrace();}
} |
voivi l'erreur qui s'affiche :
Code:
1 2 3 4 5
| java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at df.java.gesfichier.DFFichier.litObjConnexionDsFichier(DFFichier.java:136)
at df.java.gesfichier.DFFichier.main(DFFichier.java:159) |
Je tiens aussi à vous préciser que ma classe DFConnexion implémente bien l'interface serialisable.
Quelqu'un pourrait-il me dire où se trouve l'erreur ?