浅谈几种序列化协议

简介:
 工作中用过几种知名的序列化协议,说说自己的感受吧,先独立讲各自的概念,然后比较下他们的优缺点。

JSON(Javascript Object Notation)
    官方网站是这样叙述的:一种轻量级的资料交换语言。易于人阅读和编写。同时也易于机器解析和生成。
json有两种结构:
1.名称/值,例如:
{
   "name"  :  "xiaoming",
   "age"  :    12
}

你也可以再嵌套一层,例如:
{
   "name"
  {
     "first_name" :  "xiao",
     "last_name" :  "ming"
  },
   "age" :12
}

2.值的有序列表,例如:
{
   "week":
  [
     "monday",
     "tuesday"
  ]
}

也可以这样,例如
{
   "week":
  [                                                                                                                                        
    { "english" : "monday",   "chinese" : "星期一"},
    { "english" : "tuesday""chinese" : "星期二"}
  ]
}

怎么样,是不是很直观,组合方式也很自由。所以很多文档型数据库都采用json作为存储结构;

     json提供对多种编程语言的支持,详见官网 http://www.json.org, 我使用过c++的libjson,注意操作时加上异常处理,否则约定错误时解析会导致程序崩溃, javascript更简单,直接加进json.js即可。

XML:(Extensible Markup Language)
    大名鼎鼎的xml语言,对于他只讲讲解析方式吧!

第一类是基于XML文档树结构的解析,如DOM(Document Object Model);
第二类是基于流式的解析,如SAX(Simple API for XML)、StAX(Stream API for XML)和XPP(XML Pull Parser);
第三类是基于非提取式的解析,例如VTD-XML(Virtual Token Description for XML)。

    这里有篇详细介绍这几种解析方式概念和适用场景的文章,讲述的很好,希望大家参阅 http://blog.csdn.net/liuhuang007/article/details/6252569

protobuf:
    google提供的一个开源序列化框架,官网是这样解释的“Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. You can even update your data structure without breaking deployed programs that are compiled against the "old" format.”

    总结一下特点:是基于二进制的,开发人员按照它提供的语法规则定义好消息格式,然后利用它提供好的编译工具自动生成相关的类,就可以很轻松的通过调用相关方法完成消息的序列化与反序列化。

结合自己的实践(c++语言)比较下三者:

序列化和反序列化的效率:protobuf高于json,json高于xml;

可读性:xml和json我觉得难分伯仲,但是他们都好于protobuf的二进制格式;

编码复杂度:xml高于json和protobuf,至于json和protobuf,流程上protobuf要复杂些,json只要引入相应的库就行了,而protobuf首先要按规则写消息结构,然后编译成相应的类。

适用场景:我认为xml比较适合与本地存储配置文件,而json和protobuf适合于进程间消息通讯或网络间消息通讯(注:soap是基于xml的,也许当时人们普遍认为xml是银弹吧)
本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/795807如需转载请自行联系原作者

yaocoder
相关文章
|
7月前
|
XML 存储 JSON
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
|
7月前
|
XML JSON JavaScript
【面试题精讲】常见序列化协议有哪些?
【面试题精讲】常见序列化协议有哪些?
|
3月前
|
C++
[序列化协议] --- protobuf
[序列化协议] --- protobuf
25 0
|
3月前
|
JSON 数据格式 C++
[序列化协议] --- JSON
[序列化协议] --- JSON
32 0
|
3月前
|
XML 存储 API
[序列化协议] --- XML
[序列化协议] --- XML
31 0
|
3月前
|
XML JSON Linux
[序列化协议] --- 简介
[序列化协议] --- 简介
20 0
|
5月前
|
存储 JSON 编解码
IM通讯协议专题学习(十):初识 Thrift 序列化协议
本文将带你一起初步认识Thrift的序列化协议,包括Binary协议、Compact协议(类似于Protobuf)、JSON协议,希望能为你的通信协议格式选型带来参考。
72 1
|
8月前
|
存储 Dubbo Java
dubbo 源码 v2.7 分析:通信过程及序列化协议
前面我们介绍了dubbo的核心机制,今天将开始分析远程调用流程。毕竟,作为一个rpc框架,远程调用是理论的核心内容。通过对dubbo相关实现的探究,深入了解rpc原理及可能的问题。
132 0
H8
|
9月前
|
安全 网络协议 Java
跨语言的艺术:Weblogic 序列化漏洞和 IIOP 协议
Weblogic序列化漏洞主要依赖于T3和IIOP协议,在通信交互方面存在诸多问题,如跨语言、网络传输等,给漏洞检测和利用带来诸多不便。在WhiteHat Labs的理念中,漏洞检测和利用是一项创造性的工作,应该以最简洁高效的方式实现,以保证漏洞的跨平台性和实用性。因此,我们实现了跨语言的IIOP协议通信方案来解决序列化漏洞问题。
H8
155 0
|
9月前
|
JSON 网络协议 数据格式
协议,序列化,反序列化,Json
协议,序列化,反序列化,Json
58 0