java - 如何创建 ArrayList 的安全保存并在类被编辑时加载它?

标签 java serialization save xml-serialization

我想保存并加载包含“Book”对象的 ArrayList。

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

我看到很多关于这个的话题,几乎都说要使用序列化。 所以我完成了:

图书类(class)

public class Book implements Serializable{
        STUFF
}

主要

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,抱歉我的英语不好

最佳答案

使用某种数据库并管理您的架构。您的问题是您想要更改对象的定义而不更新现有对象。当您向图书添加 author 字段时会发生什么?新创作的书会有作者,而旧书则没有,你需要为此做好准备。这正是架构管理器所做的事情。

关于java - 如何创建 ArrayList 的安全保存并在类被编辑时加载它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56440669/

相关文章:

wpf - 将 wpf 图像控件保存到文件的最简单方法

java - 调试 war 文件中特定 jar 文件的包含情况

java - Wildfly 和 Mybatis 存在延迟加载异常

java2d 和比例尺

c++ - Boost二进制序列化 - 固定长度错误的双数组

java - GWT RPC 序列化异常

c# - 如何将 XML 映射到 C# 对象

java - 手动将 LWUIT 插件添加到 netbeans

iphone - iOS6应用程序状态保存和恢复

angularjs - 需要帮助来理解 Angular $watch