0

我有一个名为 Expression 的类,我尝试使用以下 load()/save() 函数进行序列化。在对我的代码和 Expression 类进行了一些更改后,它曾经工作正常,调用in.readObject()throws ClassCastException。错误消息是: java.lang.ClassCastException: java.lang.String cannot be cast to java.io.ObjectStreamClass

4

2 回答 2

0

似乎可序列化不喜欢类成员字段中的 NULL 值。如果我确保所有班级成员都有实际记忆,它不会失败。

于 2012-12-05T22:16:54.643 回答
0

对我来说,将二进制数据存储为字符串感觉非常糟糕。尝试使用更稳定的方式来存储 ObjectOutputStream 的二进制输出。如果您真的想坚持使用字符串格式的方法,请尝试使用 Base64 编码,这始终是安全的。


我可能认为的问题是您自己将 serialUID 定义为静态常量:

private static final long serialVersionUID = 3L;

此 UID 用于确定类路径中的类是否与输入对象的类兼容。所以我怀疑你修改了类而不改变serialVersionUID。这使得 ObjectInputStream 认为这是兼容的,但您仍在使用旧数据。尝试摆脱旧数据,然后重新save()调用。


你确定这Input也是可序列化的吗?该类的 UID 没有损坏?

于 2012-12-05T21:18:55.433 回答