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 :

[Info]Sérialisation / Désérialisation...


Sujet :

Java

  1. #1
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut [Info]Sérialisation / Désérialisation...
    Hello,

    Un collègue m'a affirmé que lorsque l'on sérialise un objet Java ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ObjectOutputStream oos = new ObjectOutputStream(file);
    oos.writeObject(myObject);
    oos.flush();
    oos.close();
    On n'était pas garanti de pouvoir le relire/désérialiser avec un JRE plus récent ...

    Est-ce exact ???

    Merci !

    Toine

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: Sérialisation/Désérialisation...
    Salut,

    Citation Envoyé par onlytoine
    On n'était pas garanti de pouvoir le relire/désérialiser avec un JRE plus récent ...
    Oui... et Non...

    A ma connaissance il y a deux "principaux" cas où la désérialisation echoue (pour une même classe) :

    1) Ton objet a été modifié entre les deux versions des JRE. Dans ce cas c'est tout à fait normal que cela échoue. Si ton objet est une classe entièrement developpé par toi, il ne devrait pas y avoir de soucis. Mais le problème peut se rencontrer si tu sérialize ou hérite d'une classe du JRE : c'est le cas en particulier de tous les composants Swing. En effet ces composants peuvent avoir des changements importants entre deux versions de Java qui implique que la désérialization échoue.
    Toutefois, ce problème ne se présente pas sur la plupart des classes Sérializables de l'API standard, et lorsque c'est le cas c'est indiqué dans la javadoc, par exemple pour les composants Swing :
    Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing.

    2) Ta classe a été compilé avec deux compilateurs différents. Dans ce cas il peut y avoir un problème car le serialVersionUID généré par les deux compilateurs est différents. Dans ce cas il faut définir le serialVersionUID dans le code de la classe.
    Avec Java 5.0 tu peux même afficher un warning pour cela : FAQ : [Java 5.0] serial : "serializable class Main has no definition of serialVersionUID"

    a++

    PS : Sinon tu peux utiliser les classes XmlEncoder et XMLDecoder pour sauvegarder tes classes en XML...

  3. #3
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    Merci pour ta réponse très complète !

    En fait, il s'agit d'une de mes classes qui est très simple.

    Elle est actuellement compilée en 1.4, mais je voudrais pouvoir relire les objets sérialisés plus tard, même si le code est compilé en 1.5 à l'avenir.

    J'ai fixé le serialVersionUID de la classe à 1 actuellement.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Tu peux aussi avoir une erreur de déserialisation si la classe de ton objet (cas d'une classe conçue de ta part) à deserialiser n'est pas disponible dans le classpath de l'application qui tente la désérialisation

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

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  2. Erreur 233 sous sql server
    Par brajae85 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2009, 16h12
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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