Désérialiser plusieurs Objets Java
bonjour chers collègues,
J'ai un Jardin à la classe dans laquelle je sérialiser et désérialiser Végétale multiples objets de la classe. La sérialisation est un travail, mais la désérialisation ne fonctionne pas si un souhaitez affecter à l'appel de la variable dans le mein méthode statique.
public void searilizePlant(ArrayList<Plant> _plants) {
try {
FileOutputStream fileOut = new FileOutputStream(fileName);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
for (int i = 0; i < _plants.size(); i++) {
out.writeObject(_plants.get(i));
}
out.close();
fileOut.close();
} catch (IOException ex) {
}
}
désérialisation code:
public ArrayList<Plant> desearilizePlant() {
ArrayList<Plant> plants = new ArrayList<Plant>();
Plant _plant = null;
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
Object object = in.readObject();
//_plant = (Plant) object;
//TODO: ITERATE OVER THE WHOLE STREAM
while (object != null) {
plants.add((Plant) object);
object = in.readObject();
}
in.close();
} catch (IOException i) {
return null;
} catch (ClassNotFoundException c) {
System.out.println("Employee class not found");
return null;
}
return plants;
}
Mon invoquant code:
ArrayList<Plant> plants = new ArrayList<Plant>();
plants.add(plant1);
Garden garden = new Garden();
garden.searilizePlant(plants);
//THIS IS THE PROBLEM HERE
ArrayList<Plant> dp = new ArrayList<Plant>();
dp = garden.desearilizePlant();
modifier
J'ai eu une exception de Pointeur null
La solution de @NilsH est fonctionne bien, merci!
- Que voulez-vous dire par "il n'est pas de travail"? Le code de la compilation? Ne vous obtenez des erreurs lors de l'exécution? Quelles erreurs avez-vous obtenir exactement?
- Salut, quel est le problème exact que vous avez vu? Que voulez-vous dire, il "ne fonctionne pas si un souhaitez affecter à l'appel de la variable dans le (principal) de la méthode statique"? Dans un débogueur, voyez-vous la
plants
tableau correctement construites? - Aussi, vous devez mettre votre IO appels à proximité, dans le
finally
bloc. Et aussi, vous n'avez pas besoin de votreArrayList<Plant> dp = new ArrayList<Plant>();
. JusteArrayList<Plant> dp = garden.desearilizePlant();
que votre tableau est créé dans#deserializePlant
- Pourquoi êtes-vous en boucle tout objet != null? Si vous prévoyez sur l'écriture d'une valeur null dans le flux de signal EOS, c'est redondant, et si vous vous attendez à lire une nulle sans l'écriture de celui que vous êtes trompé. Vous devriez être en rattrapage EOFException à la place.
Vous devez vous connecter pour publier un commentaire.
Comment à propos de la sérialisation de l'ensemble de la liste à la place? Il n'y a pas besoin de sérialiser chaque objet dans une liste.
Si cela ne résout pas votre problème, merci de poster plus de détails au sujet de votre erreur.
Il peut ne pas être possible pour désérialiser toute une liste d'objets (par exemple, en raison de problèmes de mémoire). Dans ce cas, essayez:
Ou en utilisant le Java SE 7 try-with-resources déclaration:
Si vous sérialiser un tableau linéaire de la liste, vous pouvez la lancer en arrière à un tableau linéaire de la liste lors de la désérialisation, toutes les autres méthodes ont échoué pour moi: