我想序列化和反序列化包含颜色数组的Object。 (彩色[] [])
颜色数组代表一个小图标。
在一些构建之后,当我尝试反序列化对象时出现错误:
java.io.InvalidClassException: java.awt.Color; local class incompatible: stream classdesc serialVersionUID = 118526816875918197, local class serialVersionUID = 118526816881161077
我该怎么做才能解决这个问题? Object本身具有默认UID(serialVersionUID = 1L;)...
谢谢:)
答案 0 :(得分:2)
再次查看错误消息:
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以及其他供应商的JDK(不是来自Oracle)进行比较。因此,我可以假设您使用较旧版本的JDK或其他供应商的JDK(例如,打开JDK,IBM等)或其他平台创建了您的文件。
如果是这种情况,我建议您通过实施自己的writeObject()
和readObject()
方法来自定义类的序列化。您不必重新实现所有类的序列化。将Color
与自定义包装器自定义序列化包装就足够了。
对于JSON,您可以使用Jackson或Gson,用于XML JAXB或Xstream,用于二进制格式的protobuff。