Object String String Object Linux Ubuntu Java

szfzf -  
KX Messages postés 19031 Statut Modérateur -
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. KX Messages postés 19031 Statut Modérateur 3 020
     
    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();

    0
    1. szfzf
       
      Merci, j'ai besoin de "transporter" la classe serialize dans une String avant de la reconvertir en classe
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020 > szfzf
       
      Alors 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);
      0
    3. szfzf
       
      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
      0
    4. szfzf
       
      SVP, j'ai vraiment besoin que ça marche pour pouvoir valider mon semestre
      0