【问题标题】:override serialVersionUID for system classes覆盖系统类的 serialVersionUID
【发布时间】:2012-03-16 11:58:16
【问题描述】:
有没有办法覆盖java系统类的serialVersionUID?
错误示例:
java.io.InvalidClassException: java.util.Date;本地类不兼容:stream classdesc serialVersionUID = 7523895402267505689,本地类serialVersionUID = 7523967970034938905
客户端和服务器有不同版本的java。但是因为我知道类是相同的,所以我希望能够使用序列化。
【问题讨论】:
标签:
java
serialization
deserialization
【解决方案1】:
你不知道这些类是相同的。它们可能是相同的,但如果版本号发生了变化,那么内部的任何东西都可能发生变化。
您需要将数据序列化为其他内容(如字符串)并在另一端反序列化。
【解决方案2】:
Peter Newton 发现的Q&A 的第一个答案有一个很有前途的方法。基本上,示例代码重载了从流中读取类描述符并调整串行版本 ID 的方法。如果您对多个类执行此操作,则需要相应地调整代码。
但请注意,这是一件相当危险的事情。如果类的传输表示不兼容,您可能会在没有任何警告的情况下得到损坏的对象。