覆盖系统类的serialVersionUID

时间:2012-02-26 22:22:54

标签: java serialization deserialization

是否有覆盖java系统类的serialVersionUID?

错误示例: java.io.InvalidClassException:java.util.Date;本地类不兼容:stream classdesc serialVersionUID = 7523895402267505689,本地类serialVersionUID = 7523967970034938905

客户端和服务器具有不同版本的java。但由于我知道类是相同的,我希望能够使用序列化。

2 个答案:

答案 0 :(得分:1)

知道这些类是相同的。它们可能是相同的,但如果版本号发生了变化,那么内部的任何内容都可能发生变化。

您需要将数据序列化为其他内容(如字符串)并在另一端反序列化。

答案 1 :(得分:0)

Peter Newton发现的Q&A的第一个答案是有前景的。基本上,示例代码重载了从流中读取类描述符并调整序列版本ID的方法。如果您为多个类执行此操作,则需要相应地调整代码。

但请注意,这是一件相当危险的事情。如果类的传输表示不兼容,则最终可能会出现损坏的对象而没有任何警告。