Java中序列化和反序列化以及serialVersionUID的作用

Java中序列化和反序列化以及serialVersionUID的作用

序列化:就是将对象转化成字节序列的过程。
反序列化:就是将字节序列转化成对象的过程。

为什么要序列化?

1.持久化。对象存储在jvm堆区,随着jvm的停止而消失,将对象序列化成字节序列,写进硬盘实现持久化。
2.网络传输。网络不能直接传输对象,所以传输前序列化,收到数据时反序列成对象。

JDK怎么实现序列化?

Java为我们提供了对象序列化的机制,规定了要实现序列化对象的类要满足的条件和实现方法。
1.条件:对于要序列化对象的类要去实现Serializable接口或者Externalizable接口
2.具体实现方法:JDK提供的ObjectOutputStream和ObjectInputStream来实现序列化和反序列化
如果实体类没有实现Serialize接口就去序列化,就会报错
image.png
演示demo
image.png
序列化
image.png反序列化
image.png

serialVersionUID的作用

在进行序列化时,会把当前类的serialVersionUID写入到字节序列中(也会写入序列化的文件中),在反序列化时会将字节流中的serialVersionUID同本地对象中的serialVersionUID进行对比,一致的话进行反序列化,不一致则失败报错(报InvalidCastException异常)

serialVersionUID值的设置(private static final long serialVersionUID= XXXL )有三种情况:
显式声明:默认的1L:
显式声明:根据包名、类名、继承关系、非私有的方法和属性以及参数、返回值等诸多因素计算出的64位的hash值
隐式声明:未显式的声明serialVersionUID时java序列化机制会根据Class自动生成一个serialVersionUID(最好不要这样,因为如果Class发生变化,自动生成的serialVersionUID可能会随之发生变化,导致匹配不上)

json序列化和JDK序列化区别

JDK序列化/反序列化:原生方法不依赖其他类库、但是不能跨平台使用、字节数较大
json序列化/反序列化:json字符串可读性高、可跨平台使用无语言限制、扩展性好、但是需要第三方类库、字节数较大。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值