zoukankan      html  css  js  c++  java
  • 数据的序列化

    一、什么是序列化

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

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

    附:

    • 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的持久化数据格式。

    谢谢!
  • 相关阅读:
    数据结构-树与二叉树-思维导图
    The last packet successfully received from the server was 2,272 milliseconds ago. The last packet sent successfully to the server was 2,258 milliseconds ago.
    idea连接mysql报错Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property
    redis学习笔记
    AJAX校验注册用户名是否存在
    AJAX学习笔记
    JSON学习笔记
    JQuery基础知识学习笔记
    Filter、Listener学习笔记
    三层架构学习笔记
  • 原文地址:https://www.cnblogs.com/ylxn/p/10451805.html
Copyright © 2011-2022 走看看