Как создать безопасное сохранение ArrayList и загрузить его, если класс редактируется? - PullRequest
0 голосов
/ 04 июня 2019

Я хотел бы сохранить и загрузить свой ArrayList, содержащий объект «Книга».

ArrayList<Book> books = new ArrayList<Book>();

Я видел много тем по этому поводу, и почти все говорят об использовании сериализации. Итак, я сделал:

КНИЖНЫЙ КЛАСС

public class Book implements Serializable{
        STUFF
}

MAIN

public static void saveList(String saveName, ArrayList<Book> books) throws IOException {
        FileOutputStream fos = new FileOutputStream(saveName);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(books);
        oos.close();
    }

public static ArrayList<Book> loadList(String saveName) throws ClassNotFoundException, IOException {
    FileInputStream fis = new FileInputStream(saveName);
    ObjectInputStream ois = new ObjectInputStream(fis);
    ArrayList<Book> books = (ArrayList<Book>) ois.readObject();
    ois.close();
    return books;
}

Это работает, но проблема в том, что если мы сделаем изменение в классе (например, добавим атрибут), он больше не будет загружать сохранение.

Так что я подумал сохранить в XML-файл. Я видел какую-то тему о записи и загрузке в xml-файл, но почти во всех версиях ссылки и пакеты с истекшим сроком действия были удалены в последних версиях, так что это старые идеи, которые больше не работают.

ВОПРОС:
Как создать безопасное сохранение моего ArrayList, который содержит объект, и загрузить его также, если я обновлю класс Book? Под «безопасным сохранением» я имею в виду, что он будет работать для длительного хранения (я считал, что сериализация не для длительного хранения)

Я думаю, что есть способ, потому что приложения и игры читают сохранения также, когда они обновляются. Как они это делают?

PS Извините за мой плохой английский

1 Ответ

1 голос
/ 04 июня 2019

Используйте какую-то базу данных и управляйте своей схемой.Ваша проблема в том, что вы хотите изменить определение объекта, не обновляя существующие.Что должно произойти, если вы добавите поле author в книгу?У вновь созданных книг будет автор, но у старых нет, к этому нужно быть готовым.Это именно то, что делают менеджеры схем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...