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

Langage Java Discussion :

Sérialization et list


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Par défaut Sérialization et list
    Bonjour,

    J'ai besoin de sauvegarder un objet contenant une List, et je rencontre un problème lors de la sérialization de celle ci. En effet, elle n'implémente pas l'interface "Serializable" et la méthode writeObject s'arrete à ce moment là.
    Comment faire alors?

    J'ia pensé faire un héritage du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class myList implements Serializable extends LinkedList{}
    mais ca me paraît un peu bourrin comme solution. Quelqu'un a t il une autre solution?
    Merci
    Sébastien

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    LinkedList est sérialisable... tout comme la plupart des collections de l'API standard !

    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Par défaut
    oups désolé, c'est sur un iterator que j'ai cette erreur : j'ai le message suivant lors de l'execution :
    java.io.NotSerializableException: java.util.LinkedList$ListItr

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Quel intérêt de vouloir sérialiser un Iterator ?

    a++

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Un itérateur te permet d'itérer sur chaque élément d'une collection. Cela n'a donc pas de sens de sérialiser l'itérateur.
    Soit tu sérialises ta collection, soit tu itères sur ta collection et que chaque élément est individuellement sérialisé (A condition que ceux ci soit sérializable).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Par défaut
    je suis en train de coder un petit éditeur de partition de musique et je me sers d'un itérateur comme d'un curseur afin de savoir où l'on se situe dans la partition au moment de l'édition, j'aimerai donc le sauvegarder en même temps que la partition.

  7. #7
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Ce n'est pas l'iterateur proprement dit qu'il faut que tu sauvegarde, mais plutot la position dans la liste (au sens index). Un arraylist serait alors plus approprié pour cela.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Par défaut
    Comment faire dans ce cas là pour "transformer" l'itérateur lors de la sérialization. Je vois bien comment faire pour obtenir l'index ( monIterateur.nextIndex() ), mais lorsque je sauvegarde mon objet, j'appelle writeObject sur "Partition", sachant que mes classes s'imbriquent comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Partition
        Melodie
             Liste de Notes
             Iterateur
             <d'autres choses>
        <d'autres choses>
    Y a il une méthode à surcharger afin de modifier le comportement de writeObject?

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Par défaut
    lut,

    Tu peux changer la méthode writeObject() pour qu'elle fasse se que tu veux ! (il faut alors aussi changer readObject() )

    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
    /** Cette méthode est appelée lors de la sérialisation de l'objet.
     * @param out est le stream de sortie
     * @throws IOException*/
    private void writeObject(ObjectOutputStream out) throws IOException {
    	out.defaultWriteObject();
    	out.writeFloat( stroke.getLineWidth() );
    	System.out.println( this + " a ete serialise");
    }
     
    /** Cette méthode est appelée lors de la désérialisation de l'objet.
     * @param in est le stream d'entrée
     * @throws IOException
     * @throws ClassNotFoundException*/
    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    	in.defaultReadObject();
    	stroke = new BasicStroke( in.readFloat() );
    	System.out.println( this + " a ete deserialise");
    }
    Par exemple ici pour sérialiser un BasicStroke, j'écris sa valeur en float et je la récupère ensuite dans readObject().

    Ne pas oublier de mettre ta variable en transient et d'appeler defaultWriteObject() et defaultReadObject().

    demande si tu as pas compris quelque chose

    EDIT : regarde sur http://ydisanto.developpez.com/tutor...ation/partie1/ pour plus d'infos

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Par défaut
    Merci pour le petit tuto, ca répond parfaitement à mes question! J'ai maintenant la solution à mon problème.

    Merci à tous!
    @+
    Seb

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/09/2011, 16h16
  2. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  3. liste d'objets
    Par Pierrot dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2002, 09h56
  4. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41
  5. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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