привет уважаемые коллеги,Deserialize несколько объектов Java
У меня есть класс Garden, в котором я сериализую и десериализую несколько объектов класса Plant. Сериализация работает, но десериализация не работает, если требуется назначить ее вызывающей переменной в статическом методе mein.
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) {
}
}
десериализация код:
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;
}
Моего ссылающийся код:
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();
редактировать
Я получил исключение нулевого указателя
Решения @NilsH работает нормально, благодаря!
Что вы подразумеваете под словом «это не работает»? Содержит ли код? Вы получаете ошибки во время выполнения? Какие ошибки вы получаете точно? – Jesper
Привет, какая именно проблема вы видите? Что вы имеете в виду, это «не работает, если вы хотите присвоить его вызывающей переменной в (основном) статическом методе»? В отладчике вы правильно строите массив 'plants'? – wmorrison365
Кроме того, вам нужно отправить свои закрытые вызовы ввода-вывода в блок 'finally'. Кроме того, вам не нужен ваш 'ArrayList dp = new ArrayList ();'. Просто используйте 'ArrayList dp = garden.desearilizePlant();' поскольку ваш массив создан в '# deserializePlant' –
wmorrison365