Чтение в сериализованных объектах из ObjectInputStream
Когда я впервые пытаюсь прочитать объекты из файла, как бы я прочитал записанный файл?
private static final long serialVersionUID = -4654676943759320425L;
private ArrayList<ArrayList<Object>> world;
private ArrayList<AFood> foods;
private ArrayList<ABlock> blocks;
private ArrayList<ABug> bugs;
private String name = null;
private int lengthX = 0, lengthY = 0;
Это класс объектов (только переменные)
open = new FileInputStream(worldSavedAs);
openBuffer = new BufferedInputStream(open);
openIn = new ObjectInputStream(openBuffer);
this.world = openIn.readObject();
Вот как я сейчас пытаюсь читать в объекте
save = new FileOutputStream(worldNameAs + ".aBugsWorld");
saveBuffer = new BufferedOutputStream(save);
saveOut = new ObjectOutputStream(saveBuffer);
saveOut.writeObject(this.worldSave); // Here was the problem
Вот как я написал файл
Очевидно, что это не правильно, и я понятия не имею, как читать в объектах, нужно ли мне вставлять переменные одну за другой или как целый класс, которого я не знаю.
РЕДАКТИРОВАТЬ: я записывал поток в файл, а не мой объект, который вызвал проблему (поскольку поток файлового ввода-вывода не может быть приведен к AWorld)
2 ответа
Это выглядит правильно. Но можно подумать, что класс, который будет записан в файл, должен быть сериализуемым.
Вы также можете сделать так:
1.> Класс для записи в файл:
class StudentRecord implements Serializable{
String name;
public StudentRecord(String name) {
this.name=name;
}
}
2.> Запись в файл
File f=new File("xyz.txt");
f.createNewFile();
fo = new FileOutputStream(f);
ObjectOutput oo=new ObjectOutputStream(fo);
StudentRecord w=new StudentRecord("MyName");
oo.writeObject(w);
3.> Чтение из файла
File f=new File("xyz.txt");
fi = new FileInputStream(f);
ObjectInputStream oi=new ObjectInputStream(fi);
StudentRecord sr=(StudentRecord)oi.readObject();
Кажется, все в порядке. Просто убедитесь, что вы пишете / читаете только сериализуемые объекты, что не ясно из вашего примера. Также я бы упростил построение потоков
ObjectOutputStream out = new ObjectOutputStream(
new BufferedOutputStream(new FileOutputStrea(file))
);
Вам не нужно сохранять ссылки на промежуточные потоки.