Serializable 问题记录

jdk中很多集合类实现了Serializable接口,它没有成员函数或者成员变量,其目的只为为了实现序列化,简单来说,它只是一个标识。

问题1

Serializable 有什么用,用在哪里?

解决方法
用途

Serializable 用在将一个对象实例的状态写入一个Byte流,并且需要通过这个Byte流将其读取成原先的对象的时候。

  • 把对象的状态物理保存:保存到文件或者数据库,供增删改查或者恢复状态。
  • 把对象实体通过网络进行传播,分布式应用中、数据持久化的场景中都会使用。
相关知识
  1. 在使用Serializable接口时,有时会定义一个private修饰的serialVersionUID属性,这个属性也是一个标识。一般建议自己设置其值,但是当没有设置时,JVM会自动生成一个(不推荐,因为这不同的JVM产生的值可能会不一样?)。

情景:当同一个类User的属性产生变化时,如果serialVersionUID不一样,序列化和反序列化的过程会出现异常。比如服务提供方提供一个api,版本1.0,User中的serialVersionUID=1L,调用方使用1.0的api时,User对象的实例可以在二者间正常传输。当服务提供方的api版本升级到2.0后,对User对象做了一些修改,serialVersionUID也随之修改为了2L,而服务调用方使用的User对象中的serialVersionUID仍然为1L,此时二者的数据就无法正常传输的。虽然是同一个类,但是并不能正常的进行反序列化了。

  1. Serializable只是保存的对象的状态,而不是类的状态。所以事先该接口,只能保存对象的非静态成员变量,而不能保存任何成员方法或者静态成员变量,因为静态成员变量实际上是属于类的状态的。

  2. 在实现了Serializable的类中,对成员变量使用transient关键字。这个关键字的作用是阻止被此关键字修饰的变量进行持久化操作。

  3. 父类实现序列化时,子类自动实现序列化;子类实现序列化接口时,父类并不会自动实现序列化接口。

  4. 有的类并没有实现序列化,但是仍然可以持久化到数据库中,其原因是实例类中的数据类型中,有些类型已经实现了序列化,而其中的基本类型也在数据库中存在对应的类型。

Serializable 问题记录相关推荐

  1. 【Java】pageHelper实现分页

    如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件.分页插件支持任何复杂的单表.多表分页.--PageHelper官网. 后端实现 <dependency> & ...

  2. 记录:TypeError: Object of type int32 is not JSON serializable。

    rect_list = list()...rect_list.append(rect1)rect_list.append(rect2)...rsp = {'rect-list': rect_list} ...

  3. 错误记录——Serialized class com.cql.entity.Teacher must implement java.io.Serializable

    在使用dubbo的时候,出现Serialized class com.*.xxx must implement java.io.Serializable,的一个错误 原因:实体类未进行序列化,在对应的 ...

  4. Flink问题记录:A raw type backed by type information has no serializable string representation. It ....

    问题原因:table转成stream,table中字段要和stream字段类型一致,如果不一致,就会报上述的错误.其实就是table是什么类型,转回流时还是必须这个类型. 示例: StreamExec ...

  5. Serializable接口

    什么是java序列化,如何实现? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间. 序列化是为了解决在对 对 ...

  6. binlog关闭事务记录_Mysql 数据库 InnoDB引擎对binlog_format的限制

    前言 我们都知道binlog_format为STATEMENT在一些场景下能够节省IO.加快同步速度,但是对于InnoDB这种事务引擎,在READ-COMMITTED.READ-UNCOMMITTED ...

  7. PostSharp AOP编程:1.基于PostSharp的AOP日志记录和异常捕捉【附带源码】

    AOP(基于切面编程):它是对业务逻辑的分离,使各个业务直接的耦合变低,比如在传统的OOP编程中将日志记录.异常处理.权限管理等方面剥离出来.在今后的维护过程中,对其改变日志记录.异常处理.权限管理方 ...

  8. java Serializable和Externalizable序列化反序列化详解--转

    一.什么是序列化?   "对象序列化"(Object Serialization)是 Java1.1就开始有的特性. 简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字 ...

  9. Mongodb利用aggregation实现抽样查询(按记录数和时间)

    之前对mongodb不熟,但是项目要用,因为数据量比较大,并且领导要实现抽样查询,控制数据流量,所以自己研究了下,亲测可用,分享一下! 话不多说,上代码: 第一种方案:加自增主键,实现按记录数抽样 1 ...

最新文章

  1. 牛顿法求解非线性方程的根
  2. Android .classpath文件的作用
  3. iOS上获取iTunes音乐权限
  4. quartz 每月一次_Quartz Cron表达式 每周、每月执行一次
  5. git hok json_从战中反弹:将Git提交信息作为JSON返回
  6. html制作圆盘时钟,jquery+html5制作超酷的圆盘时钟表
  7. C语言课后习题(65)
  8. elasticearch 安装
  9. 烟台大学计算机技术面试,2019烟台大学研究生复试面试注意哪些
  10. 格林时间转yyyy-MM-dd hh:mm:ss
  11. NLP学习—15.多模态研究方向及在文本分类、文本生成的应用
  12. Linux ubuntu centos 文件目录是什么意思
  13. Netflix/conductor学习笔记(1)
  14. IAR for MSP430 7.12.1下载
  15. 【雅思大作文考官范文】——第九篇:‘CCTV essay’
  16. Istio 中的智能 DNS 代理功能
  17. 学习linux 服务器安全这一篇文章就够了
  18. 学生专用计算机怎样开启关机,电脑自动关机,教您笔记本怎么设置自动关机
  19. 今日恐慌与贪婪指数为10 恐慌程度稍有上升
  20. noip2011 公交观光

热门文章

  1. selenium-java 优化参数设置,无界面化、允许root运行,页面不加载图片
  2. scrapy爬虫原理
  3. 中国医科大学2021年9月《中医护理学基础》作业考核试题
  4. 为什么都说淘宝假货多,却都去淘宝买
  5. 字典和json相互转换
  6. mysql alter table if exists_MySQL:ALTER TABLE如果列不存在
  7. WEB22_Js原生Ajax和Jquery的Ajax
  8. 一款炫酷的相册动画合集【源码分享】
  9. 阿里云服务器CentOS8 搭建javaweb环境及mysql数据库安装
  10. linux 键盘 键值0x1e,键盘各键对应的键值