gpt4 book ai didi

java - 更新数据结构的最佳实践?

转载 作者:行者123 更新时间:2023-12-01 13:38:23 25 4
gpt4 key购买 nike

我遇到以下问题,需要最佳实践来解决它:

我有一个应用程序,其中包含 Foo 类型的数据列表。我将此列表( ArrayList<Foo> )保存到文件系统:

FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(MyList);
oos.close();

当我启动应用程序时,我会加载它:

FileInputStream fis = context.openFileInput(FILENAME);
ObjectInputStream ois = new ObjectInputStream(fis);
MyList = (ArrayList<Foo>) ois.readObject();
ois.close();

现在我的问题:我想扩展 Foo具有一些附加属性的类。问题是,用户已保存旧列表并希望将其加载到新的 Foo 中。类,应用程序将崩溃。

解决此更新问题的最佳实践是什么?

最佳答案

在您的场景中使用序列化可能不是最佳选择。为了避免崩溃,您可以使用serialVersionUID来区分同一类的不同版本。

来自 Java API:

The serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization.

If the receiver has loaded a class for the object that has a different serialVersionUID than that of the corresponding sender's class, then deserialization will result in an InvalidClassException.

A serializable class can declare its own serialVersionUID explicitly by declaring a field named serialVersionUID that must be static, final, and of type long.

您的数据模型是否太复杂以至于无法用 SQLite DB 编写?这将允许您有选择地处理模型的加载,跳过可能导致加载具有旧结构的新模型的空属性。

关于java - 更新数据结构的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21061060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com