首页 > 解决方案 > 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

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

即使我可以serialVersionUID事先从流中读取,我也无法在 CustomHoliday 中动态设置它,serialVersionUID因为final.

有没有办法告诉Java:“不要担心serialVersionUID,它会没事的!”?

如果没有,还有其他方法可以从流中读取数据吗?每个 CustomHoliday 实例只是一个字符串和两个整数。

标签: javaandroidserializationdeserialization

解决方案


推荐阅读