IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

objet différent writeObject readObject


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 20
    Par défaut objet différent writeObject readObject
    Bonjour à tous,

    je viens vous voir à cause d'un énorme problème sur sockets.
    Mon serveur envoie un tableau de tableau d'un objet Case (Case[][])
    grâce à la méthode WriteObject de l'objet ObjectOutputStream.

    Le problème est que quand le client récupère l'objet, il le case en Case[][],
    mais l'objet est différent.

    Avant : Case[5][5] = 0;
    Case[4][5] = -1;
    Après : Case[5][5] = -1;
    Case[4][5] = 0;

    Ma classe Case implement l'interface Sérializable et j'ai testé avec et sans
    private static final long serialVersionUID = 1;

    Voila, si vous avez des questions, merci à vous pour vos futures réponses.

  2. #2
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Par défaut Bonjour...
    Pourriez-vous nous montrer le code du côté du readObject ?...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 20
    Par défaut
    Oui voici le code

    Coté Client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if(mots[0].equals("grille"))
    {
          try
          {
               Case[][] test = (Case[][])ois.readObject();
               for(int m =0 ; m < 10 ; m++)
                  for(int n =0 ; n < 10 ; n++)
                      System.out.println("Après Envoi m:"+m+" n:"+n+" contenu:"+test[m][n].get_contenu());
         }
         catch(Exception e)
         {
               System.out.println("pb ois.read Client");
         }
    }
    Coté Serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    ecriture.println("grille") ;
    sleep ( 300 ) ;
    Case[][] test2 = serveur.get_fenetre().plateau_tojoueur(Integer.parseInt(mots[1]),Integer.parseInt(mots[2]));
     
    for(int m =0 ; m < 10 ; m++)
        for(int n =0 ; n < 10 ; n++)
            System.out.println("Avant Envoi m:"+m+" n:"+n+" contenu:"+test2[m][n].get_contenu());
     
    oos.writeObject(test2) ;
    sleep ( 300 ) ;
    voila voila

  4. #4
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    Si tu envoies plusieurs fois le même objet (ta matrice de Case), pense à faire un reset() sur ton ObjectOutputStream après avoir appelé writeObject.

    La règle est d'appeler le reset() dès que tu as écrit tout ton message.

    Sans ce reset, le sérializer va considérer qu'il a déjà sérialisé ton objet et il ne va pas prendre la peine de le sérialiser à nouveau alors qu'il devrait.

    Pour info, ce n'est pas bug, c'est pour gérer les références circulaires.

  5. #5
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 20
    Par défaut
    Niquel ça marche, merci beaucoup, encore une épine de retirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Liste déroulante avec objet différent en VBA
    Par béber_novice dans le forum Général VBA
    Réponses: 1
    Dernier message: 16/04/2012, 20h07
  2. Comment avoir des noms d'objets différents ?
    Par adn013 dans le forum Langage
    Réponses: 6
    Dernier message: 11/06/2007, 15h46
  3. objets différents déclenchant la même procédure
    Par eultartuffe dans le forum Delphi
    Réponses: 12
    Dernier message: 30/11/2006, 21h16
  4. Liste d'objets différents
    Par -WanG- dans le forum C++
    Réponses: 16
    Dernier message: 11/07/2006, 09h28
  5. objets différents dans un même vector...
    Par Empty_body dans le forum Langage
    Réponses: 7
    Dernier message: 07/01/2006, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo