主要的序列化协议及应用场景

序列化对象writeObject(object->二进制)
反序列化readObject(二进制->object)

序列化作用:数据持久化;网络传输。如高并发下Session对象可持久化,需要时再还原到内存。注意:序列化出的二进制要尽可能地小。
序列化协议:java原生序列化协议、Hession序列化、Google的ProtoBuffer、Facebook的Thrift、MessgePack。
1.Java原生序列化
主要由ObjectInputStream 和ObjectOutputSream实现。序列化对象需要实现Serializization。
(1)static属性不能被序列化,序列化保存对象的状态,static属于类状态。
(2)transent修饰的不能被序列化。
(3)版本号SerialVersionUID:版本号一致,新增字段不影响序列化对象;版本号不一致,印象概念股反序列化对象,会报错。
2.Hessian序列化
Hessian是一个基于http的高性能RPC框架,其序列化算法是Hessian协议,是高效率、高压缩比的序列化方法。如:Dubbo框架支持Hessian序列化方式。优点:
(1)Hessian序列化后的数据比原生java序列化小—高压缩比。
(2)Hessian跨语言支持比较好。
(3)Hessian需要实体类实现Serializable接口。
3.Google的protobuffer序列化
它将数据结构以.proto文件进行描述,通过代码生成工具,可生成对应数据结构的pojo对象和protobuf相关的属性和方法。优点:
(1)结构化数据存储格式
(2)高效的编解码性能
(3)语言无关、平台无关、扩展性好
protobuf使用二进制编码,在空间和性能上具有很大的优势,它的数据描述文件和代码生成机制。带来的好处:
(1)文本化的数据结构的描述语言,可实现语言和平台无关,特别适合异构系统间的集成。
(2)通过标识字段的顺序,可以实现协议的前后兼容。
(3)自动代码生成机制,无需手工编写。
(4)方便后续管理和维护。
4.Facebook的thrift序列化
thrift支持压缩的二进制编解码、跨语言。
thrift适用于静态的数据交换,需先确定好它的数据结构,当数据结构发生变化时,必须重新编辑IDL文件,生成代码和编译(弱项)。
Tprotocol(编解码框架):由于Thrift(C/S结构)的RPC服务调用和编解码框架捆绑在一起,所以在使用thrift时,会采用RPC框架。
对于性能要求比较高的系统,它是优秀的RPC的解决方案。由于thrift的序列化嵌入到Thrift框架里,Thrift框架本身并没有透出序列化和反序列化接口,导致很难与其他传输层协议(如http协议)共同使用。
支持众多语言和数据类型,并对数据字段的增删具有较强的兼容性。所以,非常适合于公司内部的面向服务构建(SOA)的标准RPC框架。
thrift文档缺乏。由于thrift server是基于自身的socket服务,所以,在防火墙访问时,公司间进行通讯需要谨慎。另外,thrift序列化之后的数据是Binary数组,不具有可读性,调试代码相当困难。
5.messagePack序列化
官网:It’s like Json,but fast and small。
意思是说,它的数据格式,与Json类似,但是在存储时对数字、多字节字符、数组等都做了优化,减少了无用的字符,减少了网络传输带宽,提高传输效率。

你可能感兴趣的:(主要的序列化协议及应用场景)