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

我定期看到具有以下结构的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();

}

}

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

没有看到任何关于这个主题的非常明确的指南.一切都有点过时或非常主观.

解决方法:

ObjectInputStream#defaultReadObject和ObjectOutputStream#defaultWriteObject方法适用于您希望使用默认值编写字段以及您有其他读取或写入信息,或者您想要修改读取或写入内容的情况.如果您不想添加或更改任何内容,则仅在实现Serializable时添加显式调用没有任何优势.

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,serialization

来源: https://codeday.me/bug/20190623/1274141.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值