本人android 开发,遇到了一个关于数据序列化的坑,纪录下来以便以后查看。
所有需要序列化本地的bean都需要继承Serializable 否则无法序列化(如果不了解序列化的知识请自行百度)。
我继承了Serializable 但是没有设置SerialVersionUID 最后编译后系统根据bean的变量自己生成了一个。
随着程序的迭代,需要修改bean的结构最终导致,新版本的APK在读取这个bean后无法得到它的值,因为它的成员变量结构改变了。导致SerialVersionUID不一致了。
但是我又想能读到序列化的这个bean怎么办?我产生了一个想法如果我知道旧版本的bean的SerialVersionUID值,然后在新版的bean里设置SerialVersionUID是一样的那么不就可以读出来了吗?
经过一系列的查找java 给我们提供了一个可以获取SerialVersionUID的方法,代码如下
ObjectStreamClass osc2 = ObjectStreamClass.lookup(Calendar.class);
// get the serial for Calendar
System.out.println("" + osc2.getSerialVersionUID());
这样的两句话就可以打印出来UID 了,拿到UID 我在新版本里赋值成一样的即可。
我的问题就解决了。让我感慨学无止境啊