Bonjour,
Je me permet de vous faire part d'un problème qui me coûte une quantitée considérable de cheveux
Voilà j'ai deux applications relié par un Socket. J'ai pour intention de les faire communiquer uniquement au travers d'ObjectStream.
Lorsque je fias passé un objet sérialisé dans le flux tous marche a merveille (que ca soit la sérialization comme la désérialization).
Le problème c'est que lorsque j'envoit deux instances l'une derrière l'autre, un exception me signalant une corruption m'agresse violament !
Sérialisation :
Désérialization :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 BufferedOutputStream bos = new BufferedOutputStream(cs.getOutputStream()); oos = new ObjectOutputStream(bos); service = new Service(); System.out.println(service); service.setCode(1); service.setObject(null); oos.writeObject(service); oos.flush(); // jusque là tout marche service = new Service(); System.out.println(service); service.setCode(1); service.setObject(null); oos.writeObject(service); oos.flush();
Exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 si = (ServiceInterface) DAOClass.SERVICE.getInstance(is); System.out.println(si.getCode()); // Jusque là, la désérialisation se passe bien si = (ServiceInterface) DAOClass.SERVICE.getInstance(is); System.out.println(si.getCode());
Ne peut peut hélas pas montrer le code qui se charge directement de la désérialisation (enfin si je peux mais ca va plus embrouiller qu'autre chose, elle désérialize simplement un flux au travers d'un class loader spécifique).SEVERE: null
java.io.StreamCorruptedException: invalid stream header: 7371007E
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
at dao.CustomObjectInputStream.<init>(CustomObjectInputStream.java:22)
at dao.DAOClass.getInstance(DAOClass.java:66)
at mtransportclient.Main.main(Main.java:47)
Java Result: 1
J'ai tenté d'appeler la méthode reset() sur les OutputStream, mais sans succès. J'ai aussi tenté sans BufferedStream, mais c'est la même chose.
Une idée ?
Merci d'avance !
Partager