【发布时间】: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