gpt4 book ai didi

java - 显式声明默认 Java 类序列化方法的原因是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 02:42:36 25 4
gpt4 key购买 nike

我经常看到具有以下结构的 Java 类:

class MyClass implements Serializable {

private static final long serialVersionUID = 1L;

// ...

private void writeObject(final java.io.ObjectOutputStream s) throws IOException {
s.defaultWriteObject();
}

private void readObject(final java.io.ObjectInputStream s) throws IOException, ClassNotFoundException {
s.defaultReadObject();
}

}

据我了解,对于默认序列化,您只需声明 serializable 接口(interface)的实现并定义 serialVersionUID。是否有任何理由仅使用默认实现来声明写/读方法?我厌倦了有关代码重复的分析器警告。

没有看到关于此主题的任何真正清晰的指南。一切都有些过时或相当主观。

最佳答案

ObjectInputStream#defaultReadObject 和 ObjectOutputStream#defaultWriteObject 方法适用于以下情况:您想要使用默认值写入字段以及您有其他信息要读取或写入,或者如果您想要修改读取或写入的内容。如果您不想添加或更改任何内容,那么与仅实现 Serializable 相比,添加显式调用没有任何优势。

Java Object Serialization Specification似乎是一个很好的引用,第 1.7 节(访问类的可序列化字段)说:

The default mechanism is used automatically when reading or writing objects that implement the Serializable interface and do no further customization. The serializable fields are mapped to the corresponding fields of the class and values are either written to the stream from those fields or are read in and assigned respectively. If the class provides writeObject and readObject methods, the default mechanism can be invoked by calling defaultWriteObject and defaultReadObject. When the writeObject and readObject methods are implemented, the class has an opportunity to modify the serializable field values before they are written or after they are read.

关于java - 显式声明默认 Java 类序列化方法的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30329312/

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