当serialVersionUID不匹配时,如何读取序列化数据?

问题描述

我将ArrayList中的数据写入流:

public class CustomHoliday implements Serializable {    
    String name;
    int day;
    int month;
}

ArrayList<CustomHoliday> allCustomHolidays;

FileOutputStream fileOutputStream = context.openFileOutput(filename,Context.MODE_PRIVATE);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(allCustomHolidays);

当我尝试阅读时

FileInputStream fileInputStream = context.openFileInput(filename);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
allCustomHolidays = (ArrayList<CustomHoliday>) objectInputStream.readobject();

我收到此异常:

java.io.InvalidClassException:CustomHoliday;本地类不兼容:流classdesc serialVersionUID = -8822681925170234017,本地类serialVersionUID = -8039319578138251384

是的,我知道,我应该在CustomHoliday中声明一个serialVersionUID。但是现在为时已晚。我尝试将serialVersionUID设置为Exception中的那个,但这仅在该设备上起作用。在其他情况下,保存的serialVersionUID似乎有所不同。

即使我可以事先从流中读取serialVersionUID,由于serialVersionUIDfinal,我也无法在CustomHoliday中动态设置它。

有没有办法告诉Java:“不用担心serialVersionUID,就可以了!”

如果没有,还有其他方法可以读取流中的数据吗?这只是一个String和每个CustomHoliday实例两个int。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)