[Sérialisation] Je ne retrouve pas mes objets en input
Bonjour,
J'ai un comportement étrange que je ne comprends pas :
J'ai une classe déclarée SERIALIZABLE. En se déroulant, mon soft modifie les valeurs des champs de cette classe. Je veux écrire dans un fichier le contenu de cette classe pour chaque état.
J'ai donc le code suivant pour écrire dans le fichier. La méthode write est appelée après chaque modif de la classe.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public boolean openFile() throws IOException
{
// open an output flow to a file
_fos = new FileOutputStream(_systemToStudy.get_fileAccess().getDestFile().toOSString()
+ ".raw");
// create an object flow for the output file
_oos= new ObjectOutputStream(_fos);
return true;
}
public void writeResults(StudySystem sys) throws IOException
{
_oos.writeObject(((BranchExtension)sys.getTopology().getBranchList().get(1)));
System.out.println("out = "+((BranchExtension)sys.getTopology().getBranchList().get(1)).get_currentMassicCalculatedFlow());
_oos.flush();
} |
J'ai fais une méthode extract pour vérifier le bon fonctionnement de l'écriture :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public void extractResults() throws IOException, ClassNotFoundException
{
FileInputStream fis = new FileInputStream(_systemToStudy
.get_fileAccess().getDestFile().toOSString()
+ ".raw");
try {
ObjectInputStream ois = new ObjectInputStream(fis);
try {
boolean hasObject = true;
while(hasObject) {
try {
BranchExtension b = (BranchExtension) ois.readObject();
System.out.println("in = " +b.get_currentMassicCalculatedFlow());
} catch(EOFException oef) { hasObject = false; }
}
} finally {
ois.close();
}
} finally {
fis.close();
}
} |
voici les résultats sur la console :
Citation:
out = -1075.6774753828747
out = -210.93244535322964
out = -104.97453861555508
out = -69.85172908908521
out = -52.33449780498369
out = -41.839759537021116
out = -34.850220347842736
in = -1075.6774753828747
in = -1075.6774753828747
in = -1075.6774753828747
in = -1075.6774753828747
in = -1075.6774753828747
in = -1075.6774753828747
in = -1075.6774753828747
On voit qu'il lit le bon nombre d'objet. Mais il me donne toujours le premier !!!
J'ai tester en stockant une simple variable primitive et là ben ça marche.
Ma classe BranchExtension ne comporte rien de particulier.
Pour info, j'ai simplifié ces extraits de code pour faciliter la compréhension. En fait la méthode write va écrire beaucoup plus de données. Mais il n'empêche que ça ne marche déjà pas comme c'est là.
Si quun pouvais me débloquer ce serait sympa. Merci d'avance.