一、序列化和反序列化的概念

把对象转换为字节序列的过程称为对象的序列化;

把字节序列恢复为对象的过程称为对象的反序列化。

说人话:就是JAVA对象需要保存或通过网络传输必须保存为二进制才行,所以就需要把JAVA对象转换成二进制或二进制会的成JAVA对象。

二、如何使Java类可序列化?

实现java.io.Serializable接口,它是一个标记接口,意味着不包含任何接口和字段。仅用于标识可序列化的语义。

三、代码举例

定义一个JAVA实体类

序列化与化序列化

序列化后的文件

注意:代码演示了一个JAVA类被序列化和反序列化,假设我们尝试去除JAVA类中implements Serializable,再次运行就会出现错误,如下:

四、JAVA类中某些字段不想被序列化怎么办?

在字段中直接加上transient即可,如下图

我们再次运行代码,即可看到如下结果:

五、什么是serialVersionUID?

java序列化机制是通过类的serialVersionUID来验证版本一致性的。在反序列化时,jvm会把传来的字节流中的serialVersionUID和本地相应实体类的serialVersionUID进行比较,如果相同就认为一致,可以进行反序列化,否则出现InvalidCastException异常

模拟一下,我们先把User JAVA类中定义serialVersionUID = 4359709211352400087,然后序列化后再悠serialVersionUID = 1L,再次反序列化,得到如下错误:

再看JVM的代码

五、如何生成serialVersionUID?

一般来说有两种生成方式:

  一个是默认的1L,比如:private static final long serialVersionUID = 1L;

  一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:private static final long serialVersionUID = -8940196742313994740L;之类的。

集合中的实体类根据一个字段合并_JAVA中序列化与反序列化相关推荐

  1. java list 分组_Java 将List中的实体类按照某个字段进行分组并存

    1.JDK1.8之前: 假设有实体类User,里面有字段id,我们将相同id的User进行分组,并存放在Map中.(例子不是很恰当,但很能说明问题) public static void main(S ...

  2. java将map根据key分组_Java将List中的实体类按照某个字段进行分组并存放至Map中操作代码...

    本篇文章小编给大家分享一下Java将List中的实体类按照某个字段进行分组并存放至Map中操作代码,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1. ...

  3. android java 实体类 object变量 保存_Java中的实体类--Serializable接口、transient 关键字...

    在java中,实体类是一个非常重要的概念,我们可以在实体类中封装对象.设置其属性和方法等.关于实体类,也经常涉及到适配器模式.装饰者模式等设计模式.那么在实际代码开发中,关于实体类的注意事项有哪些呢? ...

  4. Java中的实体类(VO、PO、DO、DTO、BO、QO、DAO、POJO)

    Java中的实体类(VO.PO.DO.DTO.BO.QO.DAO.POJO) PO(persistant object) 持久对象 DO(Domain Object)领域对象 TO(Transfer ...

  5. java获取spring注解的实体_Spring 注解实体类中非数据库字段属性

    今天要给一个实体类添加一个List集合属性! private List childList = new ArrayList(); 写完后get/set方法一写,启动就报错: org.hibernate ...

  6. android 遍历实体类,Java中遍历实体类(处理MongoDB)

    在实际过程中,经常要将实体类进行封装,尤其是处理数据库的过程中:因此,对于遍历实体类能够与数据库中的一行数据对应起来. 我是使用的环境是Spring boot,访问的数据库时MongoDB 实体类遍历 ...

  7. 浅谈三层架构中的实体类(C#)

    最近因为三层架构中的实体类,引发了不少小问题,下面列举一下,谈谈自己的感想. 本文所指的实体类仅限于三层中的实体类,即数据库表的映射. 一.为什么要用实体类? |  使程序简洁易懂,便于维护. |  ...

  8. netbeans连接数据库_NetBeans Java EE技巧#1 –数据库中的实体类

    netbeans连接数据库 NetBeans IDE是开发各种应用程序的绝佳选择. 具体来说,我每天都使用它来开发和维护Java EE应用程序. 在过去的几个发行版中,不仅Java EE的生产力提高了 ...

  9. NetBeans Java EE技巧#1 –数据库中的实体类

    NetBeans IDE是开发各种应用程序的绝佳选择. 具体来说,我每天都使用它来开发和维护Java EE应用程序. 在过去的几个发行版中,不仅Java EE的生产力提高了,而且NetBeans ID ...

最新文章

  1. tcp/ip 协议栈Linux内核源码分析九 IPv6分片ip6_fragment 分析
  2. js实现焦点进入文本框内关闭输入法:imeMode
  3. OO实现ALV TABLE 四:ALV的显示样式
  4. Linux 卸载分区(会格式化分区数据)
  5. pyqt 子窗口控制主窗口绘图_实战PyQt5: 005-主窗口QMainWindow
  6. java四大模块_Spring框架七大模块
  7. 51Nod-1049 最大子段和【DP】
  8. 芜湖机器人餐厅地址_自助餐哪家强?得看谁让你扶墙... 芜湖8家自助餐厅超强攻略来了...
  9. 【模型转换】最少点的覆盖区间
  10. c#使用word、excel、pdf ——转
  11. OOP(面向对象)总结(有这一篇足矣)
  12. 世预赛:12强赛首战国足0-3不敌澳大利亚,下一场面对日本队国足会如何调整?
  13. Redis的数据变成backup
  14. 如何删除oracle备份集,RMAN中删除OBSOLETE备份集问题
  15. R语言与数据分析练习:K-Means聚类
  16. php学好要多久,零基础php自学要多久
  17. 编码:隐匿在计算机软硬件背后的语言pdf-Code:The Hidden Language of Computer Hardware and Software-Charles Petzold-pdf
  18. word文档任意位置开始插入页码
  19. 用微分和差分方程描述的因果LIT系统
  20. python 操作ps脚本_python – 有没有办法以编程方式获得ps输出?

热门文章

  1. android 申请sdcard权限_Android sdcard读写权限问题之中的一个
  2. java离职交接文档_定了!财会人离职不办这2项交接,要承担法律责任!后果非常严重...
  3. 趋势交易 高 更高_2020年为开发商带来什么,以及更多的行业趋势
  4. devops的重要性_为什么DevOps是当今最重要的技术战略
  5. 2017年大白菜系统操作说_为什么操作系统在2017年更重要
  6. firefox 开源_Firefox 10岁了,Microsoft开源了更多,等等
  7. (69)Vue-cli 打包与部署
  8. TypeScript 中类型 any,void,unknown,never之间的区别
  9. Bootstrap 支持的设备类型
  10. Generator函数的基本概念