博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈几种序列化协议
阅读量:5863 次
发布时间:2019-06-19

本文共 1789 字,大约阅读时间需要 5 分钟。

    工作中用过几种知名的序列化协议,说说自己的感受吧,先独立讲各自的概念,然后比较下他们的优缺点。
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提供对多种编程语言的支持,详见官网 , 我使用过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)。
    这里有篇详细介绍这几种解析方式概念和适用场景的文章,讲述的很好,希望大家参阅
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是银弹吧)

转载地址:http://hpunx.baihongyu.com/

你可能感兴趣的文章
Iptables
查看>>
我的友情链接
查看>>
GridView多行多列合并单元格(指定列合并)
查看>>
什么是DDOS攻击?怎么防御?
查看>>
状态模式(State Pattern)
查看>>
log4j日志框架学习
查看>>
function 与 => 的区别
查看>>
VBScript:写excel的例子
查看>>
TYVJ P1077 有理逼近 Label:坑,tle的好帮手 不懂
查看>>
面试题:缓存Redis与Memcached的比较 有用
查看>>
通过UIWebView加载读取本地文件
查看>>
EXCEL自动撤销合并单元格并填充相应内容(转帖)
查看>>
Python3学习笔记10-条件控制
查看>>
Nginx 1.2.6 稳定版发布
查看>>
黄聪:如何使用CodeSmith批量生成代码(原创系列教程)
查看>>
HDOJ---1421 搬寝室[DP]
查看>>
JS 中的== 与 ===
查看>>
ES6 - 收藏集 - 掘金
查看>>
13.11. this is incompatible with sql_mode=only_full_group_by
查看>>
Python Module_openpyxl_处理Excel表格
查看>>