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

Collection et Stream Java Discussion :

[Serializable] références circulaires


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut [Serializable] références circulaires
    bonjour à tous,
    supposons que j'ai deux classes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class ReleveNotes implements Serializable {
     
    ...
    private List<Note> note;
    ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Note implements Serializable {
     
    ...
    private ReleveNotes releve;
    lors de la sérialisation d'une instance de ReleveNotes, chaque Note aussi va être sérialisée, et donc aussi l'attribut releve.
    j'ai deux questions:
    1) pourquoi y a pas une sérialisation à l'infini
    2) lors de la désérialisation, est ce que je vais garder la même référence de ReleveNotes

    merci

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Très bonne question ! je m'étais jamais posé la question, en fait j'ai jamais été confronté à ce cas...
    1) Je présume la chose suivante :
    Lorsque tu sérialise releveNotes, (pour faire simple) l'objet releveNote est enregistré (adresse 0x00000000 dans le fichier) puis toutes les notes le sont par la suite (adresse 0x00001111 dans le fichier). S'il est pas trop con, ce qui semble être le cas, l'attribu "releve" de chaque note pointera vers l'adresse 0x00000000 (celle du releveNote).
    Cela n'est qu'une hypothèse, mais j'aimerais bien avoir confirmation...
    2) mon hypothèse veut que oui.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    En fait le ObjectOutputStream a une Map dans laquelle il stocke les objets déjà sérialisés, si au cours de la sérialisation il tombe sur un objet qui est déjà dans cette Map, il ne réécrit pas l'objet mais simplement une référence à cette objet.

    Lors de la déserialisation l'opération inverse est faite : on conserve une Map des objets désérialisés et lorsqu'on tombe sur la référence à un objet, on renvoie la valeur stockée dans cette Map.

    NB. ce ne sont pas des Map standards, elle ne se basent pas sur equals() pour savoir si deux objets sont égaux, mais sur ==

  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
    Salut,

    Citation Envoyé par the-gtm Voir le message
    NB. ce ne sont pas des Map standards, elle ne se basent pas sur equals() pour savoir si deux objets sont égaux, mais sur ==
    Surement une IdentityHashMap

    a++

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/06/2006, 17h02
  2. [SQL 2K5] Pb : ON DELETE CASCADE : référence circulaire
    Par n00bi dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 29/05/2006, 08h48
  3. Référence circulaire
    Par Mvu dans le forum ASP
    Réponses: 3
    Dernier message: 27/04/2006, 14h38
  4. [EXCEL] : référence circulaire à cause d'une macro
    Par repié dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/01/2006, 10h41
  5. [DEB] DBdesigner 4 et référence circulaire
    Par Ranbaz dans le forum DBDesigner
    Réponses: 1
    Dernier message: 13/07/2005, 17h32

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