Чтение в сериализованных объектах из 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))
);

Вам не нужно сохранять ссылки на промежуточные потоки.

Другие вопросы по тегам