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

Entrée/Sortie Java Discussion :

Problème de serialization [FAQ]


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 33
    Points : 22
    Points
    22
    Par défaut Problème de serialization
    voila mon probleme,
    j'enregistre des clients dans un fichier, pour cela j'utilise une call Client (voir + loin).
    l'enregistrement fonctionne bien mais lorsque je veux récupérer les données j'ai le message d'erreur suivant




    erreur java.io.InvalidClassException: Client; Local class not compatible: stream
    classdesc serialVersionUID=-8080437632652623297 local class serialVersionUID=77
    22597840574420801
    je ne sais vraiment pas d'ou cela peut venir surtout qu'avant de rajouter une méthode dans la class Client ca marchait parfaitement


    je vous met la class Client ainsi que la maniere dont j'essaie de recuperer les données

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
     
    System.out.println("Lecture des elements du fichier");
    	  try{
    	  	ObjectInputStream objectIn=
    	  		new ObjectInputStream(
    	  			new BufferedInputStream(
    	  				new FileInputStream("c:\\projet\\test.bin")));
    	  //FileReader flux = new FileReader("c:\\projet\\test.bin");
    		FileInputStream fis = new FileInputStream("c:\\projet\\test.bin"); 
    	  	ObjectInputStream ois=new ObjectInputStream(fis);
    	  	int numCli=Integer.parseInt(numero.getText());
    	  	Client cl=(Client)ois.readObject();
    	  	System.out.println("Client "+cl.direNum());
    	  	int cpt=cl.direNum();
    	  	while(cl!=null)
    	  		{
    	  		if(cpt==numCli) {
    	  			System.out.println("Client trouvé "+cpt+"  "+cpt);
    	  			String nom, prenom, adresse, pass;
    	  			nom=cl.direNom();
    	  			prenom=cl.direPrenom();
    	  			adresse=cl.direAdresse();
    	  			pass=cl.direPass();
    	  			ajoutCompte a=new ajoutCompte(nom, prenom, adresse, pass, numCli);
    	  			}
    	  		ois=new ObjectInputStream(fis);
    	  		cl=(Client)ois.readObject();
    	  		cpt=cl.direNum();
    	  		System.out.println("Client "+cl.direTout());
     
    	  		}
     
    	  	ois.close();
    	  	}
    	  catch(Exception ex){System.out.println("erreur "+ex);}
     
    	  	}



    class 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.io.*;
    import java.util.*;
     
     
    public class Client extends Personne implements Serializable  {
     
     
     public	Vector cpt;
     public  int numero;	
     public Compte[]compte=null;
    		/* Constructeur client*/
    		Client(){}	
     
    		Client (String nom, String prenom, String adresse,String  mdp, Vector cpt, int numero){
    			super(nom, prenom, adresse, mdp); 
    			this.cpt=cpt;
    			this.numero=numero;
    			}
     
    		Client(String nom, String prenom, String adresse, String mdp){
    		super(nom, prenom, adresse, mdp); 
    		this.cpt=cpt;
    		this.numero=numero;
    		}	
     
    	/*methodes des clients*/
     
     
    	public String direNom(){
    		return nom;
    		}	
    	public String direPass(){
    		return mdp;
    		}	
     
    	public Vector direCompte(){
    		return cpt;
    		 	}		
     
    	public String direAdresse(){
    		return adresse;
    		}	 
     
    	public int direNum(){
    		return numero;
    	}		
    	public String direPrenom(){
    		return prenom;
    		}	
     
     
     
     
     
    }



    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

    mon erreur est arrivée apres avoir rajouter la méthose direPrenom()

    merci de votre aide

  2. #2
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 164
    Points : 190
    Points
    190
    Par défaut
    C'ets parce que tu vient de changer ta classe Client. Du coup un nouveau serialVersionUID a été généné pour cette classe. Ton fichier provenant d'un enregistrement avec une ancienne version elle deviennent incompatibles.

    Regénère ton fichier avec ta nouvelle classe et relit cela marchera.

    Pour éviter cela, utilise un format lisible sans UUID : en XML par exemple.
    Il existe pour cela plusieurs projets (open-source entre autre) pour mapper une classe avec un fichier XML : Castor fait partie de ces projets

  3. #3
    Membre régulier
    Inscrit en
    Avril 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 52
    Points : 78
    Points
    78
    Par défaut
    Il est également possible de donner un numéro de série à une classe java, et s'il ne change pas, la désérialization reste possible sur d'ancienne "version" de l'objet.

    Pour cela, il faut placer dans ta classe une constante de classe ainsi faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    static final long serialVersionUID = <ce que tu veux>L;
    Si tu veux mettre autre chose que ce que tu veux, tu peux utiliser l'outil serialver trouvable dans tout bon jdk. Par exemple, pour java.lang.String, il donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    static final long serialVersionUID = -6849794470754667710L;
    [/code]

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    merci de votre aide avec ca je devrai m'en sortir
    en plus c ete trs rapid
    thx

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

Discussions similaires

  1. problème avec serial port
    Par shirya dans le forum VB.NET
    Réponses: 15
    Dernier message: 22/12/2010, 10h03
  2. Probléme avec serialize()
    Par Shandler dans le forum jQuery
    Réponses: 3
    Dernier message: 16/07/2009, 11h30
  3. problème de Serialization
    Par guy_s dans le forum Langage
    Réponses: 1
    Dernier message: 18/12/2008, 23h29
  4. Problème de serialization d'une Jframe
    Par romjeripa dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 26/08/2008, 16h36
  5. [Tableaux] problèmes avec serialize
    Par d0mii dans le forum Langage
    Réponses: 3
    Dernier message: 15/05/2007, 11h02

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