gpt4 book ai didi

java - 反序列化 java.awt.Color -> java.io.InvalidClassException

转载 作者:行者123 更新时间:2023-11-30 04:12:08 25 4
gpt4 key购买 nike

我想序列化和反序列化一个对象,其中包含一个颜色数组。 (颜色[][])

颜色数组代表一个小图标。

经过一些构建后,当我尝试反序列化对象时出现错误:

java.io.InvalidClassException: java.awt.Color; local class incompatible: stream classdesc serialVersionUID = 118526816875918197, local class serialVersionUID = 118526816881161077

我可以做什么来解决这个问题?对象本身具有默认 UID (serialVersionUID = 1L;)...

谢谢:)

最佳答案

再次查看错误消息:

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(例如开放 JDK、IBM 等)或其他平台创建了文件。

如果是这种情况,我建议您通过实现自己的 writeObject()readObject() 方法来自定义类的序列化。您不必重新实现所有类的序列化。用您的自定义包装器自定义序列化来包装 Color 就足够了。

顺便说一句,序列化对象的前向/后向兼容性是 java 整个序列化机制的一个众所周知的弱点。您可以使用替代方案,例如序列化为 JSON、XML 或其他二进制格式。

对于 JSON,您可以使用 Jackson 或 Gson,对于 XML JAXB 或 Xstream,对于二进制格式 protobuff。

关于java - 反序列化 java.awt.Color -> java.io.InvalidClassException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19361253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com