Bonjour,
En l'absence d'une base de données, quelle est la meilleure solution pour stocker des informations ? La sérialisation ? Si oui, quelles sont les limites de cette approche au niveau volume ?
Bonjour,
En l'absence d'une base de données, quelle est la meilleure solution pour stocker des informations ? La sérialisation ? Si oui, quelles sont les limites de cette approche au niveau volume ?
La sérialisation n'est pas un moyen de stockage, mais plutôt de "compression d'objets". Cela peut être utilisé pour le stockage, mais surtout pour la communication entre plusieurs applications, par exemple un client-serveur.
Si les données ne doivent pas être partagées par plusieurs postes, tu peux utiliser des Properties (format texte ou xml) ou alors te créer ton propre format de fichier XML.
La principale limite de la serialisation est qu'elle est peu adaptee pour un usage sur le long terme, ou dans le cadre d'une classe qui est souvent modifiee. En effet le mecanisme par defaut ne peut pas deserialiser la version anterieure d'une classe si cette derniere a ete modifiee depuis.
Si cela t'arrive, tu te trouveras donc dans l'impossibilite de restaurer tes anciennes sauvegardes.
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Heu... pas vraiment, heureusement. Que la sérialisation soit incapable de retrouver une ancienne version est une des légendes urbaines du monde java, si je puis me permettre.
En tous les cas, ici, il suffit de donner à la nouvelle version de classe le même serialVersionUID que l'ancienne, qui t'est donné en lisant le message d'erreur. Cela fonctionnera dans déjà 95% des cas. Quelques traficotages avec les APIs de sérialization te permettront de couvrir 4 autres % encore. Et, pour le reste, il est fort probable que le changement de version soit une création cachée d'une nouvelle classe.
Toutes ces manipulations et (in)compatibilités sont parfaitement documentées.
Et je ne suis pas sûr que les modes de sauvegardes supposés capables de tenir compte des changements de version se comportent aussi bien, et surtout aussi facilement.
Bon, cela dit, pour répondre à la question initiale, l'usage de la sérialisation est très pratique pour des transactions très simplifiées ; ex : je lis mes données au lancement de l'appli, et je les sauvegarde à la fin.
D'autres alternatives : la sérialisation à la mode XMLEncoder, JAXB/JAXP (ou comment faire compliqué quand on peut faire simple), les properties, les fichiers textes/binaires de toutes formes et de toutes confessions.
À noter que depuis java 6 il est exeptionnellement difficile de se retrouver en l'absence d'une base de données, comme tu dis. Comment as-tu fait, que t'est-il arrivé ?
Ce qui est bien sur totalement abordable pour un debutant qui se contente d'un cours qui lui a ete donne en classe (par exemple) ou on explique uniquement le mecanisme ecriture/lecture de base.
Et si tu en profitais pour etendre notre FAQ sur ce sujet ????
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Ah oui, si c'est un étudiant qui se contente de son cours...
Bon OK, je vais tenter de faire la question Corneguidouille ! J'ai fait une modif dans ma classe et la désérialization ne fonctionne plus que se passe-t-il ? LOL ? pour la FAQ.
Partager