【问题标题】:How to create a safe save of an ArrayList and load it also if class is edited?如果编辑类,如何创建 ArrayList 的安全保存并加载它?
【发布时间】:2019-10-19 19:03:40
【问题描述】:

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

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

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

图书课

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 文件中看到了一些关于写入和加载的主题,但几乎所有都在最新版本中删除了过期的链接和包,所以它们是旧的灵魂,它们不再工作了。

问题:
如果我更新 Book 类,如何创建包含对象的 ArrayList 的安全保存并加载它?使用“安全保存”,我的意思是它将适用于长期存储(我读到序列化不适用于长期存储)

我认为有一种方法,因为应用程序和游戏在更新时也会读取存档。他们是怎么做到的?

PS 对不起我的英语不好

【问题讨论】:

  • 您可以使用 json 或 yml 而不是 xml,但请注意,对于类中的某些更改,加载将失败...
  • 到一定数量的Books,一个架子(单个文件的隐喻)可能就足够了(xml、csv、yml、json),但如果你的library 不断增长,您可能希望拥有一个图书馆柜(database 的隐喻)。考虑为您的数据使用数据库……

标签: java serialization save xml-serialization


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多