java - 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 中声明一个。但现在为时已晚。我试图将serialVersionUID
Exception 设置为一个,但这仅在该设备上起作用。在其他情况下,保存的serialVersionUID
似乎不同。
即使我可以serialVersionUID
事先从流中读取,我也无法在 CustomHoliday 中动态设置它,serialVersionUID
因为final
.
有没有办法告诉Java:“不要担心serialVersionUID,它会没事的!”?
如果没有,还有其他方法可以从流中读取数据吗?每个 CustomHoliday 实例只是一个字符串和两个整数。
解决方案
推荐阅读
- reactjs - 找不到模块:错误:无法解析“zlib”
- asp.net-mvc - Microsoft 使用子域登录
- flutter - 如何在同一请求上使用颤振上传器和块上传器
- python-3.x - Python - 在文件写入期间无法到达 KeyboardInterruption
- reactjs - 为什么 React 钩子形式的 defaultValue 不能在反应中工作
- linux - 如何在openbmc中启用bmcweb
- javascript - 用条纹反应变化量
- python-3.x - Dockerize Django 应用程序失败,出现错误“/bin/sh: [python3,: not found”
- javascript - 尝试在 PyQt5 GUI 中绘制叶图时出错“Js:未捕获的 ReferenceError:L 未定义”。代理问题?
- java - React-Native 无法在 Android 上构建