更新我的数据结构的最佳做法?

时间:2014-01-11 10:16:38

标签: java android

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

我有一个带有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类中,应用程序将崩溃。

解决此更新问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

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

来自Java API:

  

序列化运行时与每个可序列化的类a关联   版本号,称为serialVersionUID,在此期间使用   反序列化以验证发送者和接收者   序列化对象已加载该对象的类   兼容序列化。

     

如果接收者已经为具有a的对象加载了一个类   不同的serialVersionUID比相应的发送者的不同   class,然后反序列化将导致InvalidClassException。

     

可序列化类可以通过声明a来显式声明自己的serialVersionUID     名为serialVersionUID的字段必须是   static,final和long类型。

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