再次查看错误消息:
java.io.InvalidClassException: java.awt.Color;
local class incompatible:
stream classdesc serialVersionUID = 118526816875918197,
local class serialVersionUID = 118526816881161077
似乎您使用一个版本对类进行了序列化,Color
并尝试使用其他版本对其进行反序列化。
这是serialVersionUID
在我的环境中。
private static final long serialVersionUID = 118526816881161077L;
它与您的第二个serialVersionUID
. 但是第一个是不同的:118526816875918197
. 这个事实有点奇怪,因为我将这个版本 ID 与 java 6 和 java 7 JDK 进行了比较,它们是相等的。我无法将它与较旧的 JDK 以及其他供应商(不是 Oracle)的 JDK 进行比较。所以我可以假设您使用旧版本的 JDK 或其他供应商的 JDK(例如 open JDK、IBM 等)或其他平台创建了文件。
如果是这种情况,我建议您通过实现自己的writeObject()
和readObject()
方法来自定义类的序列化。您不必重新实现所有类的序列化。Color
用您的自定义包装器为它定制序列化就足够了。
顺便说一句,序列化对象的向前/向后兼容性是 java 整个序列化机制的一个众所周知的弱点。您可以使用替代方法,例如序列化为 JSON、XML 或其他二进制格式。
对于 JSON,您可以使用 Jackson 或 Gson,对于 XML JAXB 或 Xstream,对于二进制格式 protobuff。