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 ?
Version imprimable
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.
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 ????
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.