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)
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());
        }
    }
Déserialisation
(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);
        }
    }
Et enfin la méthode de réception par le réseau (utilisée par l'application C)

Network
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());
        }
    }
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.

Si quelqu'un à une solution à mon problème, je suis preneur.