java序列化与反序列化(1)------序列化、反序列化概念浅述
来源:互联网 发布:韩子高 网络剧 编辑:程序博客网 时间:2024/06/16 00:29
java序列化与反序列化是一项比较重要的技术点,目前也有很多成熟的组件可以使用比如protobuf、thrift、jute、jdk自带序列化等诸多可选项。
那么我们下面就介绍一下序列化相关的内容。
(1)什么是序列化与反序列化?
序列化:简洁的说序列化就是将jvm内存中对象的状态按照约定的某种方式转换成二进制字节流的过程。
反序列化:按照序列化时的约定方式从二进制字节流中重建对象的过程。
(2)什么情况下需要序列化和反序列化?
当我们想把jvm内存中的对象持久化到硬盘上的时候,为了便于重建对象,我们采用序列化这种机制。
当我们通过RPC框架进行远程 过程调用时,客户端将请求参数通过序列化的形式传递给服务端,服务端反序列化出对象获取参数。
当我们希望将我们的对象能以字符串形式存储到Redis等中间件中时,我们可以通过将对象序列化成文本存储。当需要的时候读取数据再进行反序列化。
当然还有很多其他可以使用序列化技术的场景,这里无法一一列举。
(3)如何选择序列化和反序列化组件?
面对这么多的序列化组件,我们该如何选择呢?当然实际的使用中我们可以通过如下四点来作为选择的依据。
- 序列化之后的数据的字节大小
- 序列化和反序列化的效率
- 序列化对象状态改变之后,是否兼容旧版本客户端
- 使用上是否需要借助第三方的IDL工具
不同的序列化组件由于使用了不同的序列化协议,导致序列化后的数据大小不同,理想情况下序列化之后的数据只有对象状态的数据。然而既要考虑能正常反序列化重建出对象,又要考虑向后兼容旧版本,这就不得不在序列化中增加额外的元数据,记录对象类名和域的完整信息。
像protobuf、thrift、Ice序列化组件,都是使用IDL来同时为客户端和服务端提供序列化对象的细节处理说明。因为客户端和服务端都是使用同一套IDL生成的代码,这样序列化之后的数据就会相对较小,对于对象的域只序列化域的类型和顺序id。而像Json、java自带序列化api这样的序列化机制,必须把序列化的详细数据分布信息序列化到二进制流中,这样势必会造成数据量的增加。
接下来我们会通过代码的形式来详细看看java自带序列化api和thrift序列化的内部机制。
阅读全文
0 0
- java序列化与反序列化(1)------序列化、反序列化概念浅述
- 序列化与反序列
- 序列化与反序列
- java序列化与反序列化
- java序列化与反序列化
- java序列化与反序列化
- java序列化与反序列化
- Java序列化与反序列化
- Java序列化与反序列化
- java 序列化 与 反序列化
- java序列化与反序列化
- JAVA序列化与反序列化
- java序列化与反序列化
- java序列化与反序列化
- java序列化与反序列化
- Java序列化与反序列化
- Java序列化与反序列化
- Java序列化与反序列化
- 第二讲,计算机网络概述(下)
- Linux中makefile过程(尚未学完)
- React Native项目结构
- Caffe2-windows下caffe的gpu加速
- Java for Web学习笔记(八四):SOAP(1)小例子准备
- java序列化与反序列化(1)------序列化、反序列化概念浅述
- Unity2D游戏入门教程(一)宝石迷阵(4)选择并交换宝石
- c#--String Builder --字符串高效拼接
- STM32 定时器计数器 更新事件
- AsyncTask 源码解析
- db2中的常用数据类型
- linux终端常用快捷键
- [siggraph17]《使命召唤13:无限战争》光照技术
- JDK 、Tomcat、 Mysql, 安装、配置、优化