目 录CONTENT

文章目录

序列化

在水一方
2022-02-18 / 0 评论 / 0 点赞 / 1,080 阅读 / 898 字 / 正在检测是否收录...

平时在开发中在进行数据持久化和网络传输时经常用到序列化,除了知道让对象实现Serializable接口这个操作,通过查看这个接口可以看到里面没有任何方法,对于其了解的并不深刻,本文来对这部分内容进行小结

内存中(jvm的堆内存中)的数据对象只有转化成二进制流才可以进行持久化和网络传输

序列化概念

将数据对象转化为二进制流的过程称之为对象的序列化

在 Java 中,只要一个类实现了 java.io.Serializable 接口,那么它就可以被序列化
通过ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化

使用的常见场景

RPC框架的数据传输

序列化类型

java原生序列化

java类通过实现Serializable接口来实现该对象的序列化,这个接口非常特殊,没有任何方法,只起标识作用

特点:兼容性最好,不支持跨语言,性能一般

对象序列化机制是 Java 语言内建的一种对象持久化方式

Hessian序列化

一种动态类型,跨语言基于对象传输的网络协议,java对象序列化的二进制流可以被其他语言(如C++,Python)反序列化

特点:

json序列化

将数据对象转换为json字符串,json的可读性好,方便调试

为什么要定义serialversionUID

实现Serializable接口的类一定要显式的定义serialversionUID、

transient防止反编译

将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。
简单点说,就是被 transient 修饰的成员变量,在序列化的时候其值会被忽略,在被反序列化后, transient 变量的值被设为初始值, 如 int 型的是 0,对象型的是 null
如HashMap实现了Serializable接口,其中很多成员变量就是加了这个关键字修饰如:size,modCount等

也可以参考一下以下博客:
https://blog.csdn.net/weixin_45596022/article/details/114258708

问题

为什么会出现Fastjson反序列化漏洞?
序列化是深 clone的一种实现?

0

评论区