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 :

Sérialisation : Récupérer anciennes données


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Master Comptabilité, contrôle, audit
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Master Comptabilité, contrôle, audit
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Points : 21
    Points
    21
    Par défaut Sérialisation : Récupérer anciennes données
    Bonjour,

    Je n'ai pas trouvé la réponse à ma question sur internet donc je viens vers vous pour éclaircir un problème que je rencontre.

    J'ai mis en place une sérialisation d'une classe en vue de l'exporter dans un fichier.

    J'ai fais pas mal de modifs sur cette classe depuis et maintenant je n'arrive plus à importer mes fichiers. Malheureusement, comme un idiot, je n'ai pas gardé l'ancienne version. Ce que je souhaite juste aujourd'hui c'est récupérer les variables (2 int et un tableau)qui sont contenues dans les fichiers afin de les réexporter avec le nouveaux formats.

    Est-ce possible et comment ?

  2. #2
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Je n'ai jamais vraiment tenté l’expérience, mais je tenterais de procéder comme suit:

    - Je fixerai un seralVersionUID dans ta classe correspondant à celui utilisé dans ton fichier. Tu dois pouvoir l'obtenir dans l'exception levée (au pire en debug)
    - Aprés, je rendrais ma classe Externalizable et j'implémenterais mon readExternal() ou je ferais les readInt() et co dans le bon ordre (par rapport a ce qu'il y a dans ton fichier)

    L'idéal aurait été d'avoir la version d'origine pour deseraliser. Il faut vraiment garder à l'esprit que la sérialisation n'est pas ce qui se fait de mieux pour les stockages de "longue durée"
    JBusyComponent, une API pour rendre occupé un composant swing.
    SCJP Java 6.0 (90% pass score)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Master Comptabilité, contrôle, audit
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Master Comptabilité, contrôle, audit
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Merci de ta réponse.

    Que préconise tu pour le stockage de longue durée ?

  4. #4
    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
    Salut,

    Citation Envoyé par MinesesII Voir le message
    J'ai fais pas mal de modifs sur cette classe depuis et maintenant je n'arrive plus à importer mes fichiers.
    Quels sont les modifications qui ont été apporté ?

    Selon les cas le fait d'utiliser le même serialVersionUID devrait suffire, comme l'indique divxdede.
    S'il n'est pas défini, la moindre modification mineure engendre un nouveau UID qui casse la compatibilité...


    Citation Envoyé par MinesesII Voir le message
    Que préconise tu pour le stockage de longue durée ?
    Perso pour du long terme j'éviterais la sérialisation. Ca peut être casse-gueule à gérer.


    Une solution en standard serait d'utiliser XmlEncoder, qui permet de transformer une classe en XML via le constructeur par défaut et les getter/setter.
    Alors certes c'est toujours fortement lié à Java (nom de classes, type, etc.), mais cela reste du XML lisible par n'importe quel programme, et éventuellement modifiable par batch.


    Mais perso j'aime bien utiliser le JSON. C'est encore plus léger et plus simple à "partager" entre différente application.
    Il n'y a rien en standard mais la librairie Gson est très complète : https://sites.google.com/site/gson/gson-user-guide


    Le gros avantage des format XML/JSON, c'est qu'il sont lisible par un humain, et donc facilement modifiable.
    Le désavantage c'est que c'est un peu plus verbeux... mais cela se compresse plutôt pas mal donc tu peux coupler cela avec du GZIP par exemple



    a++

  5. #5
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Une solution en standard serait d'utiliser XmlEncoder, qui permet de transformer une classe en XML via le constructeur par défaut et les getter/setter.
    Alors certes c'est toujours fortement lié à Java (nom de classes, type, etc.), mais cela reste du XML lisible par n'importe quel programme, et éventuellement modifiable par batch.


    Mais perso j'aime bien utiliser le JSON. C'est encore plus léger et plus simple à "partager" entre différente application.
    Il n'y a rien en standard mais la librairie Gson est très complète : https://sites.google.com/site/gson/gson-user-guide


    Le gros avantage des format XML/JSON, c'est qu'il sont lisible par un humain, et donc facilement modifiable.
    Le désavantage c'est que c'est un peu plus verbeux... mais cela se compresse plutôt pas mal donc tu peux coupler cela avec du GZIP par exemple
    petit bémol toutefois: la doc de XMLEncoder est probablement une des plus déficientes de Java
    faire des choses toutes simples avec des composants qui ne sont pas strictement des beans (ce qui est souhaitable dans bien des cas) peut demander de gros efforts de compréhension.
    autre format: YAML (J'ai une légère allergie à JSON ... allez savoir pourquoi )
    Ceci dit le format sérialisé comporte aussi des informations intéressantes qui permet de faire joujou avec les CLassLoader (cf. JINI)
    (Pour des besoins internes j'ai developpé un autre format texte (de type clef=valeur -récursif-) qui marche très rapidement .... mais bon c'est pas du standard)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    petit bémol toutefois: la doc de XMLEncoder est probablement une des plus déficientes de Java
    faire des choses toutes simples avec des composants qui ne sont pas strictement des beans (ce qui est souhaitable dans bien des cas) peut demander de gros efforts de compréhension.
    Le but n'est pas de produire un format XML que l'on avait en tête, mais de faire une sérialisation qui sera en XML plutôt qu'en binaire opaque. Cela permet d'être plus robuste au changement, et au pire, de fabriquer des outils qui passent de l'un à l'autre sans difficulté.

    Ce n'est pas ce dont on a l'habitude avec du XML, mais ça fait ce que ça doit faire. (Pour le coup, du JSON aurait été plus pertinent, mais ce n'était pas à la mode à l'époque.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Le but n'est pas de produire un format XML que l'on avait en tête, ....
    je le sais bien ... mais pour l'avoir utilisé pour faire des journalisations d'objets , je trouve que l'utilisation de XMLEncoder/decoder est très loin d'être évidente du fait d'une doc indigente.
    par indigente je veux dire: la doc existe mais le rédacteur pense que l'on est au courant de tous les pourquoi et comment des mécanismes internes (les PersistenceDelegate sont croquignolets et il faut une sacré dose d'aspirine pour les utiliser correctement)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Oui ben il arrive très vite un moment où ça ne suffit pas non plus et où il va falloir regarder les options plus élaborées de persistance. Personnellement cela ne m'étonnait pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 34
    Points : 43
    Points
    43
    Par défaut
    Le XML/YML/JSON c'est bien quand on veut partager des infos avec des applis commerciales.

    Sinon, fais ton propre format. Ou utilise une lib qui fais tout ( du genre Kryo )

Discussions similaires

  1. Réponses: 12
    Dernier message: 12/11/2010, 12h30
  2. Récupérer les données interbase dans une TStringGrid
    Par Ousse dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/03/2005, 12h51
  3. Récupérer les données d'une iframe
    Par juli1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/02/2005, 22h53
  4. Récupérer des données Excel vers Interbase ...
    Par Djedjeridoo dans le forum InterBase
    Réponses: 2
    Dernier message: 20/07/2003, 18h16
  5. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44

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