五,xml和json及protobuf

一:早期数据交换的唯一公共语言

1xml

1.1xml 是一种用于标记电子文件使其具有结构性的标记语言 , 它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言 ,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据

1.2XML有丰富的编码工具,比如Dom4j、Dom、SAX等

1.3XML的解析方式有两种 ( 预先知道文档结构的情况下解析)

(1)一是通过文档模型解析,也就是通过父标签索引出一组标记。例xmlData.getElementsByTagName("tagName")

(2)另外一种方法是遍历节点(document 以及 childNodes)。这个可以通过递归来实现

1.4xml缺点:

(1)xml格式存储的数据要比其它数据库格式存储占用空间大,因为它除了要保存原始数据外还需要保存元数据进行描述

(2)XML+XSLT ,由于缺乏所见即所得的页面编辑器支持,对于实现相同显示效果的复杂页面,xml+xslt的工作量要比html+css大的多,成本和复杂性更高

(3)格式转换问题,例如给一个doc或wps做数据交互,要先知道doc怎么编码你才可以用xml描述并还原


二为了提供一种比XML更好的方式来进行系统间通信,json和protobuf应运而生

2json格式

2.1JSON代表JavaScript Object Notation,它是一种简单的消息格式,源自JavaScript语言子集。 JSON消息以文本格式交换 , JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。

2.2有效数据率:JSON作为数据包格式传输的时候具有更高的效率,这是因为JSON不像XML那样需要有严格的闭合标签,这就让有效数据量与总数据包比大大提升,从而减少同等数据流量的情况下,网络的传输压力。

2.3常用解析类库:

其中gson,jackson,fastjson都是我们常用的工具类 , 基本上都包含两大块JSONObject和JSONArray

3protobuf:

3.1.定义

是由Google开发的二进制格式,用于在不同服务之间序列化数据

Protocol buffers通常称为Protobuf,是Google开发的一种协议,允许对结构化数据进行序列化和反序列化

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式

3.2支持:

  Google开源了这个协议,支持JavaScript,Java,C#,Ruby等

3.3缺点:

  Protobuf。 + 可读性不高 ,社区 缺少详细的文档 (相对于json或xml)

3.4优点:

protobuf + 格式规范。 + 支持rpc。 + 结构校验

4比较xml,json和protobuf

4.1如果要将 ProtoBuf、XML、JSON 三者放到一起去比较,应该区分两个维度。一个是数据结构化,一个是数据序列化。这里的数据结构化主要面向开发或业务层面,数据序列化面向通信或存储层面,当然数据序列化也需要“结构”和“格式”,所以这两者之间的区别主要在于面向领域和场景不同,一般要求和侧重点也会有所不同。数据结构化侧重人类可读性甚至有时会强调语义表达能力,而数据序列化侧重效率和压缩

4.2环境问题: javascript环境(例如NodeJS和浏览器,使用json( 当JSON不是native环境(如NodeJS,浏览器)时 ,性能比较低)) 其他平台,例如Java,Android,Python等 ,可以考虑使用protobuf

5总结:

XML、JSON、ProtoBuf 都具有数据结构化和数据序列化的能力

XML、JSON 更注重数据结构化,关注人类可读性和语义表达能力。ProtoBuf 更注重数据序列化,关注效率、空间、速度,人类可读性差,语义表达能力不足(为保证极致的效率,会舍弃一部分元信息)

ProtoBuf 的应用场景更为明确,XML、JSON 的应用场景更为丰富。

你可能感兴趣的:(五,xml和json及protobuf)