Les FAQs Java :
FAQ JAVA FAQ Java EE FAQ Java ME FAQ Java XML FAQ JavaFX FAQ Java GUI FAQ Struts FAQ JSF FAQ JDBC JDO FAQ Hibernate FAQ Spring FAQ Eclipse FAQ NetBeans FAQ JCreator FAQ Maven 2

FAQ JavaConsultez toutes les FAQ

Nombre d'auteurs : 53, nombre de questions : 231, dernière mise à jour : 26 janvier 2014 

 
OuvrirSommaireFichiers, flux et réseauxSérialisation

Le 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!

 
Sélectionnez

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();
Créé le 20 octobre 2006  par aDamas

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 :

 
Sélectionnez

FileInputStream fis = new FileInputStream("options.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);		
Options options=(Options)ois.readObject();
ois.close();
Créé le 20 octobre 2006  par aDamas

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 :

 
Sélectionnez
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 :

 
Sélectionnez
$ serialver -classpath build/classes praline.Alfred
praline.Alfred: static final long serialVersionUID = -4630845128859230043L;
$ 
Créé le 7 juin 2009  par gifffftane

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 :

 
Sélectionnez
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. 
Créé le 7 juin 2009  par gifffftane
Les codes sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis à deux licences, en fonction des contributeurs : - Les contributions de Clément Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies des contributions de Clément Cunin et Johann Heymes tant que cette note apparaît clairement : "Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement". - Pour ce qui est des autres contributions : Copyright © 2014 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction, ne peut en être faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.