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

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

  1. java params 参数_将params作为参数传递给类扩展方法的函数

    我正在尝试将函数作为参数传递给类扩展方法 . 做的时候 fun Router.handleJsonGet(path: String, method: () -> Any) { this.get( ...

  2. [改善Java代码]养成良好习惯,显式声明UID

    建议11: 养成良好习惯,显式声明UID 我们编写一个实现了Serializable接口(序列化标志接口)的类, Eclipse马上就会给一个黄色警告:需要增加一个Serial Version ID. ...

  3. 构造函数调用默认构造函数_显式无参数构造函数与默认构造函数

    构造函数调用默认构造函数 大多数不熟悉Java的开发人员都会Swift了解到,如果他们没有指定至少一个显式构造函数,则会为Java类隐式创建一个" 默认构造函数 "( 由javac ...

  4. 链接器工具错误 LNK2019 必须在友元声明中显式指定模板参数

    摘自MSDN:ms-help://MS.MSDNQTR.v90.chs/dv_vccomp/html/4392be92-195c-4eb2-bd4d-49cfac3ca291.htm 下面的示例生成与 ...

  5. C# 使用new 关键字显式隐藏从基类继承的成员和内部类的使用

    在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员. 3)new ...

  6. java多线程知识_学习知库丨Java多线程知识大全

    进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换 ...

  7. java 多态 显式隐式,Java 构造器中的显式参数和this隐式参数

    1.构造器 写一个Java类,首先要先从构造器开始,构造器与类同名,在构造类的对象时会先从构造器开始. 构造器总是伴随着new操作符的执行而被调用. 构造器主要是用来初始化类的实例域. 构造器的特点: ...

  8. Java并发编程之显式锁(Lock)使用

    又是一个基于AQS好用的类,看来下次有必要看看AQS了,正好又是放假. 既然叫显式锁,必然也有隐式锁,也就是所谓的synchronzied关键字,它们两者的区别呢在于使用范围,synchronzied ...

  9. java 侵入性_侵入式列表实现Java?

    我不知道任何现有的实现(不,我不认为普通的Java集合是侵入性的). 这可能是因为这个列表在Java中的唯一主要优点是当您已经有要删除的元素(并且在该位置没有迭代器)时,将快速的remove()调用. ...

最新文章

  1. python 装饰器入门
  2. 智能、弹性、易用:云时代的负载均衡之道
  3. 云主机实现外网转发访问内网的 Redis 和 MongDB 数据库
  4. mysql weindow 安装_windows下怎么安装mysql
  5. git太慢时的加速办法,测试有效
  6. 聊聊如何从零开始自学编程
  7. 超级计算机中心建设方案,超算中心建设框架
  8. 2014年FME校园培训考核通过名单
  9. linux多网卡的路由模式和桥接模式设置方法
  10. 视频、图形图像处理之Opencv技术记录(四)、OpenCV教程概述
  11. CTF.show-mx密码2
  12. Python中如何将浮点型数据转换成整型
  13. Apache 实现AJAX跨域请求
  14. 机器学习之网格搜索调参sklearn
  15. 性能瓶颈--CPU(上下文切换)
  16. 【面向校招】操作系统面经总结
  17. 养QQ宠物不花Q币?完全可以!(转)
  18. Spring Boot文件下载断点续传
  19. js混淆加密,通过混淆Js代码让别人(很难)还原,js代码加密
  20. 使用PHPProxy把虚拟空间变成HTTP代理(ZT)

热门文章

  1. Apache JMeter 启动
  2. jboss连接池,断开后自动重连功能
  3. Spring基础环境搭建
  4. Linux安装SonarQube和sonar-scanner详细安装及配置
  5. sqlite3的编译和使用
  6. Leetcode 904.水果成蓝(滑动窗口,哈希容器map
  7. 学java要算法吗_学习java不可不知的几种算法
  8. gradle官方文档_Spring Boot+Gradle+MyBatisPlus3.x搭建企业级的后台分离框架
  9. C语言 va_end 宏 - C语言零基础入门教程
  10. C语言 数组长度计算 - C语言零基础入门教程