
FAQ JavaConsultez toutes les FAQ
Nombre d'auteurs : 53, nombre de questions : 231, dernière mise à jour : 7 juin 2009
Sommaire→Fichiers, flux et réseaux→SérialisationLe but est de sauvegarder une instance d'un objet particulier. Dans cette exemple, je sauvegarde des options paramétrables par l'utilisateur.
La class de l'objet à "serializer" doit implémenter l'interface Serializable!
Options options=new Options(); //implémente Serializable
FileOutputStream fos = new FileOutputStream("options.tmp"); //fichier de sortie
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(options);
oos.close();
Lien : Pour en savoir plus : Le tutorial de SunPour en savoir plus : Le tutorial de Sun
L'instance d'un objet serializé(sauvegardé à l'aide de l'interface Serializable) se récupère comme suit :
FileInputStream fis = new FileInputStream("options.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
Options options=(Options)ois.readObject();
ois.close();
Lien : Pour en savoir plus : le tutorial de SunPour en savoir plus : le tutorial de Sun
Oui, si vous prenez la précaution d'indiquer la valeur du serialVersionUID dans votre classe, et que cette valeur reste constante.
Exemple :
public final class Alfred implements java.io.Serializable
{
static final long serialVersionUID = 1515L; // Bataille de Marignan, 16.000 morts.
...
}
Ceci protège des évolutions mineures (ajout ou retrait d'attributs ou méthodes).
La commande serialver offre le calcul d'un serialVersionUID à partir de l'état présent d'une classe :
$ serialver -classpath build/classes praline.Alfred
praline.Alfred: static final long serialVersionUID = -4630845128859230043L;
$
Lire le message d'erreur, et affecter à la nouvelle version de la classe le serialVersionUID de l'ancienne version.
Par exemple, si la désérialization renvoie ce message d'erreur :
Exception in thread "main" java.io.InvalidClassException: praline.Alfred; local class incompatible: stream classdesc serialVersionUID = -2335767472728093557, local class serialVersionUID = -4630845128859230043
... donnez à votre classe le serialVersionUID -2335767472728093557.


















