Object String String Object Linux Ubuntu Java

Bonjour,

Les mêmes codes se serialization deserialization marchent sur Windows mais pas sur Linux Ubuntu

Morceau morceau2 = null;

  try {
    
       ByteArrayOutputStream bo = new ByteArrayOutputStream();
       ObjectOutputStream so = new ObjectOutputStream(bo);
       so.writeObject(morceau);
       so.close();
       
      retour =  bo.toString();
       
   } catch (Exception e) {
       System.out.println(e);
   }
    
  try {

      byte b[] = retour.getBytes(); 
      ByteArrayInputStream bi = new ByteArrayInputStream(b);
      ObjectInputStream si = new ObjectInputStream(bi);
       morceau2 = (Morceau) si.readObject();
      
      
  } catch (Exception e) {
      System.out.println(e);
  }
 
System.out.println("Titre morceau reconstitue " + morceau2.titre);


java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
java.lang.NullPointerException


Pouvez-vous m'aider ?

Merci d'avance.

1 réponse

  1. Modérateur
    Bonjour,

    bo.toString();
    va dépendre de l'encodage du système (différent entre Windows et Linux).

    Dans la mesure où les bytes que tu manipules sont des données binaires, il n'y a aucune raison de faire de la conversion en texte (avec String), il vaudrait donc mieux t'en passer.

    byte[] b = bo.toByteArray();

    1. Merci, j'ai besoin de "transporter" la classe serialize dans une String avant de la reconvertir en classe
    2. Modérateur
      @szfzfAlors fait ta conversion dans un encodage prédéfini, qui ne dépend pas du système.

      retour =  bo.toString(charset);
      byte[] b = retour.getBytes(charset);
    3. Morceau morceau2 = null;

      try {

      ByteArrayOutputStream bo = new ByteArrayOutputStream();
      ObjectOutputStream so = new ObjectOutputStream(bo);
      so.writeObject(morceau);
      so.flush();

      retour = bo.toString("UTF-8");

      } catch (Exception e) {
      System.out.println(e);
      }

      try {

      byte b[] = retour.getBytes("UTF-8");
      ByteArrayInputStream bi = new ByteArrayInputStream(b);
      ObjectInputStream si = new ObjectInputStream(bi);
      morceau2 = (Morceau) si.readObject();

      } catch (Exception e) {
      System.out.println(e);
      }

      Mêmes erreurs
    4. SVP, j'ai vraiment besoin que ça marche pour pouvoir valider mon semestre