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 :

[Hashcode] Différent selon la machine ?!


Sujet :

Langage Java

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut [Hashcode] Différent selon la machine ?!
    Bonsoir,

    mon problème est le suivant, j'ai un serveur d'un coté, un client de l'autre (avec des SSLSocket). Jusque là, pas de problème. Mon but est d'envoyer un objet depuis mon serveur vers mon client afin de l'éditer sur le client, puis de le renvoyer sur le serveur afin de mettre à jour des informations. Afin de ne pas toujours envoyer cet objet, je me suis dit pourquoi ne pas comparer le hashcode de mon objet afin de ne l'envoyer que si celui-ci est différent. Mais je suis alors confronté à quelque chose qui me semble étrange :

    -Sur le serveur je crée mon objet, son hascode est X
    -Je l'envoi via un ObjectOutputStream, il est recrée sur le client et a un hascode Y (!= X)
    Je renvoi ce même objet du client vers le serveur, et son hascode "redevient" X.
    Je précise que la fonction hashcode des mon objet et des objets encapsulés est bien redéfinie (génération via NetBeans)

    J'aimerais donc savoir si le hashcode peut varier pour un même objet selon la machine. Et de plus que me conseillez vous pour tester si il existe en différence entre mon objet sur le serveur et sa dernière valeur sur mon client, ceci de façon très rapide, sans devoir transférer l'objet complet ?


    En espérant avoir été assez clair, merci d'avance pour vos réponses, et @demain matin ^^

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Ca m'étonne pas que le hashcode soit différent sur deux machines différentes.

    Par exemple, sur Object, hashcode est construit à partir de l'adresse interne de l'objet, qui varie forcement d'une machine à l'autre (et même d'une execution à l'autre).

    Utiliser le hashcode pour identifier un objet est sans doute une erreur. Deux objets qui ne sont pas égaux peuvent avoir le même hashcode.

    Tu peux peut être ajouter un champ id sur tes objets, de type long par exemple, si tu veux vraiment les identifier.

  3. #3
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Coucou,

    La fonction hashCode ne sert absolument pas à identifier un objet !
    Pour avoir un exemple de son utilité, vois ici : http://fmora.developpez.com/tutoriel...oduction/#L4.1, elle sert notamment à l'optimisation des recherches et autres comparaisons dans une collection quelconque.

    Cordialement

    Fred

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Merci de vos conseils mais mon but étant de remarquer si il y a eu changement dans les valeurs de mon objet, un ID ne sert pas beaucoup, il me faut vraiment un hash qui se base sur la valeur de mes variables et non sur leur adresse mémoire.

  5. #5
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Par défaut
    je me trompe peut être mais les protocoles genre tcp/ip garantissent déja l'intégrité des données non?

    sinon pourquoi ne pas prendre exemple sur ces protocoles, ou une checksomme...

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Mon but n'est pas tellement de tester l'intégrité durant la transmission, mais de contrôler si il y a eu de changements sur mon Objet entre un moment T et un moment T+1 afin de savoir si oui ou non il est utile de renvoyer le dit objet dans le flux. Bien évidemment ceci afin de sauvegarder de la bande passante.

    Je fais des tests sur le checksum MD5 en ce moment, ce qui est plutôt pas mal, mais je dois passer par une sérialisation vers un fichier afin d'obtenir le hash de ce fichier, au lieu de le faire directement sur mon Objet.

    Je suis donc toujours preneur d'une solution me permettant de générer une sorte de checksum sur un Objet à partir de la valeur de ses variables.

  7. #7
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Tu redéfinis equals dans ton objet, et tu appelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monObjetEnvoyé.equals(LObjetQueJaiEnvoyeEtQueLeServeurMaRenvoye);
    Si c'est true, ils sont pareils, sinon il a été modifié.

    Pour redéfinir la méthode equals, regarde dans la javadoc

    Fred

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Merci, j'ai bien évidemment déjà redéfini equals dans toutes mes classes. Mais mon soucis est que l'objet en question est assez conséquent, et dans le cas d'une utilisation avec de nombreux postes, cela devient vite très lourd de télécharger tous les objets. (1 par poste)

    Je procède donc de la façon suivante :

    Lors de l'ajout d'un nouveau post, je télécharge cet objet, que je sérialise.
    Lors d'une connexion ultérieur, cet objet est re-généré sur le serveur, mais si les paramètres ne changent pas, mon objet restera le même que précédemment, il est donc inutile de le re-télécharger.
    C'est pourquoi je cherche un moyen, comme le checksum, de vérifier, sans devoir télécharger une nouvelle fois, si mon objet est le même que lors de la dernière connexion.

    Pour le moment je m'oriente vers un sérialisation puis un hash MD5 sur le fichier, mais je ne sais pas si c'est une bonne solution.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Comme signalé ci-dessus, deux objets différents pourront avoir le même code.

    Tu risque donc d'avoir des problèmes.

    A moins de redéfinir ta propre méthode hashcode.

Discussions similaires

  1. Taille des input différente selon les machines
    Par vias44 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 12/03/2014, 14h29
  2. Affichage différent selon texte dans une case
    Par pingoo78 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 16h32
  3. tailles d'input différentes selon les postes (?)
    Par mch_27 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/10/2005, 11h21
  4. [Interface graphique]Composant différents selon le PC
    Par Cyborg289 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 01/08/2005, 10h05
  5. CSS : fichier include différent selon chaque resolution
    Par Sylvain245 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 31/03/2005, 17h57

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