fegin调用为什么要序列化_Java 序列化和反序列化的底层原理

本文详细探讨了Java序列化和反序列化的概念、原因,以及Java中序列化的过程,包括transient关键字、writeObject和readObject方法、serialVersionUID的作用。还介绍了Java序列化实现原理,包括如何检查对象是否实现writeObject方法,以及反序列化的过程。此外,文章提到了其他序列化方式,如XML、JSON和Protobuf等。
摘要由CSDN通过智能技术生成
序列化和反序列化

序列化是通过某种算法将存储于内存中的对象转换成可以用于持久化存储或者通信的形式的过程

反序列化是将这种被持久化存储或者通信的数据通过对应解析算法还原成对象的过程,它是序列化的逆向操作

为什么需要序列化

前端请求后端接口数据的时候,后端需要返回 JSON 数据,这就是后端将 Java 堆中的对象序列化为了 JSON 数据传给前端,前端可以根据自身需求直接使用或者将其反序列化为 JS 对象

RPC 远程调用过程中,调用者和被调用者必须约定好序列化和反序列化算法,比如 A 应用将 User 对象序列化为了 JSON 数据传给 B 应用,User 对象数据为 {"id": 1, "name": "long"},到达 B 应用的时候需要将这些数据反序列化为对象,如果此时 B 应用的反序列化算法是 XML 的话那么肯定就解析失败了,所以必须都得约定好他们都采用 JSON 序列化算法,那么基于 JSON 标准就能成功解析出 User 对象

Java 中的序列化
5d96eb7fb8d5093527cad19a27a66641.png
660593b4d28fb258166c4dffc142b78d.png
transient

如果某个字段我们不想通过 Java 默认序列化机制输出,我们就可以通过该字段来表明当前字段不需要被序列化

9bad1180eaf3b1ba2e985527eaff66ee.png
writeObject 和 readObject

我们想通过自定义的方式将 address 数据序列化

33d3c1343bcc997c66c78a330e50909d.png

其中的 writeObject 作用于写序列化数据的时候会反射调用该方法,readObject 会在反序列化的时候调用

serialVersionUID 的作用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值