【发布时间】:2021-06-09 10:13:58
【问题描述】:
built-in serialization of Java objects to their binary forms 现在在大多数项目中并不常见,它们倾向于使用 ProtoBufs、XML、JSON 等在服务器之间进行数据传输。 CORBA 和所有似乎都属于 2000 年代的项目。老实说,我只见过它实现过一次(在十年前的一个 J2EE 项目中),它看起来有点古怪。不过,每次 IntelliJ 抱怨某些课程中缺少 serialVersionUID 时,我仍然会想起整个 Serializable 事情!如今,这主要发生在我使用 Jackson 处理 JSON 序列化/反序列化时,因为它具有类型注释,表明某些类必须实现 Serializable。通常像
StdDeserializer<T> extends JsonDeserializer<T> implements Serializable, Gettable
(我没有看到T需要可序列化,只有序列化器?)
现在,我不明白的是,当我们现在主要处理 JSON 和 XML 时,为什么还要处理二进制 Java 对象序列化的概念。为什么 Jackson(和其他“新”库)会选择处理这个问题?
我唯一的猜测是,这与 Jakcson 的客户端序列化的域类无关,但一些高级 JVM 使用可以在 JVM 或类似的东西之间传输正在使用的各种对象,这需要稳定的接口对于writeObject() 和readObject()。但我在这里真的如履薄冰。
【问题讨论】:
-
您的问题出在 intellij,而不是 java。没有必要实际定义一个serialversionid。如果你不使用内置序列化,你应该禁用 intellij 中的检查
-
不过,这不是我的问题。我在问杰克逊,尽管 IntelliJ 可能会抱怨 :) 我只是被提醒这个接口仍然存在。
-
这很难回答,因为只有这个确切的
class的开发者才能提供他们这样做的为什么的见解。 -
长期以来,标准的建议基本上是让所有东西都可以序列化,只要它可以轻松完成。如今,情况看起来有所不同,请参阅this related question。但是,作为库提供者,您需要考虑是否要支持使您的类可序列化。能够保存序列化程序的状态可能看起来不是一个超级常见的用例,但它可能很容易实现。似乎创作者认为它值得。
-
根据JavaDocs of StdDeserializer 判断,
Serializable在 2.0 中不存在,但在 2.1 中存在。您可能会挖掘导致添加它的更改请求。
标签: java serialization