Bonsoir,
Je vous présente la solution que j'essaie d'implémenter:
Celle ci requiert 3 applications que je vais nommer A, B et C.
L'application A qui construit un objet et le sérialise sous forme de fichier (nommons le "obj.ser").
On copie alors ce fichier obj.ser vers un dossier de l'application B. Celle ci, est un serveur (codé en C) qui doit permettre l'envoi par le réseau du fichier obj.ser.
L'application C reçoit le fichier obj.ser, et reconstitue l'objet depuis le fichier.
Cependant, l'erreur suivante survient lorsque je veux reconstituer mon objet depuis le fichier (dans l'application C, après avoir reçu le fichier depuis le réseau) :
Une StreamCorruptedException est levée (invalid type code: 00) lors de l'appel à la méthode readObject() de l'objet ObjectInputStream.
Voici le code des méthodes de sérialisation/déserialisation :
Sérialisation
(Utilisée par l'application A)
Déserialisation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 static public void SERDataModel(String filename, PCADataModel m) throws SerializationException { try { FileOutputStream fOS = new FileOutputStream(filename); ObjectOutputStream oOS = new ObjectOutputStream(fOS); oOS.writeObject(m); oOS.close(); fOS.close(); } catch (FileNotFoundException ex) { throw new SerializationException(ex.getMessage()); } catch (IOException ex) { throw new SerializationException(ex.getMessage()); } }
(Utilisée par l'application C)
Et enfin la méthode de réception par le réseau (utilisée par l'application C)
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
17
18
19
20
21 static public PCADataModel unSERDataModel(String filename) throws SerializationException { PCADataModel model = null; try { FileInputStream fIS = new FileInputStream(filename); ObjectInputStream oIS = new ObjectInputStream(fIS); model = (PCADataModel) oIS.readObject(); oIS.close(); fIS.close(); return (model); } catch (StreamCorruptedException ex) { //L'exception est levée ici throw new SerializationException(ex.getMessage()); } catch (FileNotFoundException ex) { throw new SerializationException(ex); } catch (IOException ex) { throw new SerializationException(ex); } catch (ClassNotFoundException ex) { throw new SerializationException(ex); } }
Network
Je ne comprends pas le problème, j'arrive à reconstituer l'objet parfaitement sans passer par le réseau, en copiant le fichier obj.ser à la racine de l'application C et en déserialisant directement l'objet sur disque.
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 private void createPCAMonitor(int dataSize) { byte[] buf = new byte[dataSize]; try { //dis est un DataInputStream relié à la socket dis.readFully(buf); FileOutputStream fos = new FileOutputStream("obj.ser"); fos.write(buf); PCADataModel dataModel = IHMBuilder.unSERDataModel("obj.ser"); SwingUtilities.invokeLater(new IHMBuildRunnable(dataModel)); } catch (IOException ex) { LogManager.write(LogManager.LogType.NETWORK, ex.getMessage()); } catch (SerializationException ex) { LogManager.write(LogManager.LogType.NETWORK, ex.getMessage()); } }
Si quelqu'un à une solution à mon problème, je suis preneur.
Partager