深入理解Java序列化的原理

前言

序列化是将对象转换为可传输格式的过程。是一种数据的持久化手段。一般广泛应用于网络传输,RMI和RPC等场景中。几乎所有的商用编程语言都有序列化的能力,不管是数据存储到硬盘,还是通过网络的微服务传输,都需要序列化能力。

JAVA序列化

在Java的序列化机制中,如果是String,枚举或者实现了Serializable接口的类,均可以通过Java的序列化机制,将类序列化为符合编码的数据流,然后通过InputStream和OutputStream将内存中的类持久化到硬盘或者网络中;同时,也可以通过反序列化机制将磁盘中的字节码再转换成内存中的类。

如果一个类想被序列化,需要实现Serializable接口。否则将抛出NotSerializableException异常。Serializable接口没有方法或字段,仅用于标识可序列化的语义。
自定义类通过实现Serializable接口做标识,进而在I0中实现序列化和反序列化,具体的执行路径如下:

#write0bject ->#write0bject0(判断类是否是自定义类)->#write0rdinaryObject(区分Serializable和Externalizable)->writeSerialData(序列化fields)->invokewriteobject(反射调用类自己的序列化策略)

其中,在invokeWriteObject的阶段,系统就会处理自定义类的序列化方案
这是因为,在序列化操作过程中会对类型进行检查,要求被序列化的类必须属于Enum、Array和Serializable类型其中的任何一种。

Serializable 和 Externalizable 接囗有何不同?

类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小徐很努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值