序列化和反序列化

  • 目的

解决网路通信中的一个对象传输的问题,即将当前JVM进程中的一个对象跨网络传输到另外一个JVM进程里面的进行恢复.


  • 序列化

简单来说就是把内存里面的对象转化为字节流,以便用来实现存储和传输

前提是为了保证通信双方对于对象的一个可识别性,很多时候我们会把对象先转化为通用的解析格式.例如Json.Xml或者其他格式,然后把他们转化为数据流进行网络传输.从而实现跨平台,或者跨语言的一个可识别性

2.1概念:

序列化(Serialization)是一种将对象以一连串的字节描述的过程,将程序中的对象,放入硬盘(文件)中保存就是序列化,如果不存放在磁盘中,而是一直存放在内存中,会增大内存的消耗;序列化就是将对象的状态信息转换为可以存储或传输的形式的过程;

2.2选择问题

JSON,XML,Protobuf,Kyro,Heison

2.2.1关键因素

序列比之后的数据大小 因为数据大小会影响传输性能

序列化的性能 序列化耗时较长会影响业务的性能

是否支持路平台和跨语言

成熟度越成熟的序列化技术的成熟度,使用的公司越多,也就越稳定

  • 反序列化

根据从文件或者网络上的获取的对象的一个字节流,根据字节流里面保存对象描述信息和状态,重新构建一个新的对象

3.1概念

反序列化(Deserialization)是一种将这些字节重建成一个对象的过程,将硬盘(文件)中的字节码重新转成对象就是反序列化。

在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

把对象的字节序列永久保存到硬盘上,通常存放在一个文件中(序列化对象)

在网络上传送对象的字节序列(网络传输对象) 实际上就是将数据持久化,防止一直存储在内存当中,消耗内存资源。而且序列化后也能更好的便于网络运输何传播

序列化:将java对象转换为字节序列

反序列化:把字节序列回复为原先的java对象

四.序列化的必要条件

必须是同包,同名。

serialVersionUID必须一致。有时候两个类的属性稍微不一致的时候,可以通过将此属性写死值,实现序列化和反序列化。

总结:

serialVersionUID是序列化前后的唯一标识符

默认如果没有人为显式定义过serialVersionUID,那编译器会为它自动声明一个!

serialVersionUID序列化ID,可以看成是序列化和反序列化过程中的“暗号”,在反序列化时,JVM会把字节流中的序列号ID和被序列化类中的序列号ID做比对,只有两者一致,才能重新反序列化,否则就会报异常来终止反序列化的过程。

为了serialVersionUID的确定性,建议mplements Serializable的对象,都手动显式地为它声明一个serialVersionUID明确值!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值