Bonjour à tous,

Je travaille actuellement sur un petit système multi-agents (en utilisant la plateforme JADE) et 2 agents doivent s'échanger un objet java (une HashMap classique).

Le seul type de données pouvant circuler entre les 2 est du texte, il faut donc sérialiser l'objet sous forme de texte, l'envoyer puis le reconstruire à partir de ce texte.

Après quelques recherches, je pense que je dois utiliser un ByteArrayOutputStream sur lequel je mappe l'ObjectOutputStream dans lequel je sérialise l'objet. J'utilise ensuite la méthode toString() de ByteArrayOutputStream afin d'obtenir une chaîne de caractère. Voici le code côté expéditeur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(conferenceTest); // l'HashMap à transmettre
reponse.setContent(baos.toString()); // contenu du message à envoyer
Une fois le message envoyé, il faut reconstruire l'objet en utilisant logiquement ByteArrayInputStream et ObjectInputStream. Voici le code côté destinataire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
ByteArrayInputStream bais = new ByteArrayInputStream(content.getBytes()); //content étant le contenu du message reçu, donc en théorie l'objet sérialisé
ObjectInputStream in = new ObjectInputStream(bais); // ligne posant problème
conferenceTest = (HashMap<String,String>)in.readObject();
Lors de l'exécution de la 2ème ligne, je rencontre cette exception:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
Est-ce que quelqu'un voit d'où peut venir le problème?

Merci beaucoup