数据的序列化

数据的序列化

一、什么是序列化

数据在网络间要进行通信,将数据结构或对象编码,然后在网络间传输就是序列化过程。

反之的解码就是反序列化的过程。

附:

  • POJO(Plain old java object),或者JavaBean,POJO只有setter和getter方法。
  • IDL(interface description language)文件。参与通讯的各方需要对通讯的内容需要做相关的约定。IDL用来撰写协议约定。

二、几种常见的序列化和反序列化协议

1、XML&SOAP

  • XML一种常用的序列化和反序列化协议。具有跨机器,跨语言等优点。
  • SOAP(SIMPLE Object Access Protocol)是一种广泛应用的,基于XML为序列化和反序列化协议的结构化消息传递协议。IDL是WSDL。在传输层的协议,SOAP最常见的使用方式XML+HTTP。

SOAP协议具有广泛的群众基础。基于HTTP的传输协议使得其在穿越防火墙时有良好的安全特性。对于公司之间传输数据相对小或者实时性相对低的服务是个好选择。但是数据量大的时候,内存和磁盘开销比较大,因此不适合用XML。XML序列化和反序列化的开销比较大,如果对于延时性较低的场景不适用。

2、JSON(Javascript Object Notation)

适用场景

  • 数据量小,实时性相对较低的服务
  • 居于Web brower的Ajax请求
  • 由于JSON具有非常强的前后兼容性,对于接口经常变化,并对可调式性要求高的场景。
  • 由于JSON的典型应用场景是JSON+HTTP,适合跨防火墙访问。

3、Thrift

Thrift是Facebook开源提供的一个高性能,轻量级RPC服务框架,其产生正是为了满足当前大数据量,分布式、跨语言、跨平台数据通讯的需求。但是Thrift并不仅仅是序列化协议,而是一个RPC框架。

适用场景

  • 对于需求为高性能,分布式的RPC服务,Thrift是一个优秀的解决方案。它支持众多语言和丰富的数据类型。

缺点,安全性是个问题。无法支持向持久层直接读写数据。所以不适合做数据持久化序列化协议

4、Protobuf

  • 对工程师友好
  • 序列化数据非常简介、紧凑、与XML相比其序列化之后的数据量约为13到110。
  • 解析速度非常块
  • 使用简洁

5、Avro

有两种序列化格式:Json或Binary格式。Binary格式在空间开销和性能方面可媲美Protobuf。JSON格式目前是试验阶段。Avro在做文件持久化的时候,一般会和Schema一起存储,所以Avro序列化文件自身具有自我描述属性,所以非常适合于做Hive、Pig和MapReduce的持久化数据格式。