Serialisation/deserialisation d'un arrayList retourne des objets vides
	
	
		bonjour,
j'utilise la serialisation pour sauvegarder mes données, notament je serialize un arraylist comme ca :
	Code:
	
1 2 3 4 5 6 7 8
   |  
ArrayList<FishObject> objects = null;
... affectation de objects ...
FileOutputStream fos = new FileOutputStream("monfichier");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(objects);
oos.flush();
oos.close(); | 
 FishObject est bien serialisable :
	Code:
	
public class FishObject extends Object3D implements Comparable<FishObject>, Serializable{
 et sauf erreur de ma part, apres un bon paquet de debug mon arrayList objects contient bien des données avant d'être sérialisé :( 
Quand je recharche tout ca
	Code:
	
1 2 3 4 5
   |  
fis = new FileInputStream("monfichier");
ois = new ObjectInputStream(fis);
objects = (ArrayList<FishObject>) ois.readObject();
ois.close(); | 
 mon arrayList objects est plein d'objets vides (attributs aux valeurs par défaut), il semble quand bien que le nombre d'objets est bon au moins
Alors là je vois pas ...
help
	 
	
	
	
		Info sur la sérialisation
	
	
		Pour décourvrir les secrets de la sérialisation :
http://java.sun.com/developer/techni...serialization/
en gros, l'atribut SerialUID permet à ta classe d'être acceptée à tous les coups par le ObjectStream, mais tu prend le risque d'avoir un résultat incohérent, alors dans ce cas il vaut mieux redéfinir ta propre sérilization:
1. soit en surchargeant les méthodes:
	Code:
	
1 2 3 4 5 6 7 8 9 10 11 12 13
   |  
180   private void writeObject(ObjectOutputStream out) throws IOException
190   {
200     out.defaultWriteObject();
220   }
230   private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
240   {
250     // our "pseudo-constructor"
260     in.defaultReadObject();
270     // now we are a "live" object again, so let's run rebuild and start
280     // autre traitement à toi
290
300   } | 
 2. soit en implémentant "Externalizable" ce qui te rend sérializable et te permet de créer ton propre mécanisme de séralisation.
Arpès, il faut bien gérer tes version: ajouter un N° de version d'enregistrement dans ta classe (je ne pense pas qu'on puisse utiliser directement le SerialUID, risque de plantage) , et avoir un bloc pour désérialiser chaque version pour maintenir la compatibilité ascendante.