java序列化与反序列化是一项比较重要的技术点,目前也有很多成熟的组件可以使用比如protobuf、thrift、jute、jdk自带序列化等诸多可选项。
那么我们下面就介绍一下序列化相关的内容。
(1)什么是序列化与反序列化?
序列化:简洁的说序列化就是将jvm内存中对象的状态按照约定的某种方式转换成二进制字节流的过程。
反序列化:按照序列化时的约定方式从二进制字节流中重建对象的过程。
(2)什么情况下需要序列化和反序列化?
当我们想把jvm内存中的对象持久化到硬盘上的时候,为了便于重建对象,我们采用序列化这种机制。
当我们通过RPC框架进行远程 过程调用时,客户端将请求参数通过序列化的形式传递给服务端,服务端反序列化出对象获取参数。
当我们希望将我们的对象能以字符串形式存储到Redis等中间件中时,我们可以通过将对象序列化成文本存储。当需要的时候读取数据再进行反序列化。
当然还有很多其他可以使用序列化技术的场景,这里无法一一列举。
(3)如何选择序列化和反序列化组件?
面对这么多的序列化组件,我们该如何选择呢?当然实际的使用中我们可以通过如下四点来作为选择的依据。
- 序列化之后的数据的字节大小
- 序列化和反序列化的效率
- 序列化对象状态改变之后,是否兼容旧版本客户端
- 使用上是否需要借助第三方的IDL工具