protobuf 理解
2016-01-12 15:04
621 查看
一、什么是protobuf
类似我们传统使用的json,xml等传输数据的方式。
google 提供了三种语言的实现:java、c++ 和
python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用
xml 进行数据交换快许多。
二、Protobuf的优点
1,性能好,效率高,较之json或xml传输速度快,因为它是二进制的,相对应的缺点就是可读性不高
2,代码生成机制,数据解析类自动生成
3,支持向后兼容和向前兼容
4,支持多种编程语言(java,c++,python)
三、简单的将protobuf与xml进行对比一下:
ProtocolBuffer拥有多项比XML更高级的串行化结构数据的特性,ProtocolBuffer:
更简单
小3-10倍
快20-100倍
更少的歧义
可以方便的生成数据存取类
例如,让我们看看如何在XML中建模Person的name和email字段:
[/code]
对应的ProtocolBuffer报文则如下:
当这个报文编码到ProtocolBuffer的二进制格式( http://code.google.com/apis/protocolbuffers/docs/encoding.html )时(上面的文本仅用于调试和编辑),它只需要28字节和100-200ns的解析时间。而XML的版本需要69字节(除去空白)和 5000-10000ns的解析时间。
当然,操作ProtocolBuffer也很简单:
而XML的你需要:
当然,ProtocolBuffer并不是在任何时候都比XML更合适,例如ProtocolBuffer无法对一个基于标记文本的文档建模,因为你根本没法方便的在文本中插入结构。另外,XML是便于人类阅读和编辑的,而ProtocolBuffer则不是。还有XML是自解释的,而 ProtocolBuffer仅在你拥有报文格式定义的 .proto 文件时才有意义。
类似我们传统使用的json,xml等传输数据的方式。
google 提供了三种语言的实现:java、c++ 和
python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用
xml 进行数据交换快许多。
二、Protobuf的优点
1,性能好,效率高,较之json或xml传输速度快,因为它是二进制的,相对应的缺点就是可读性不高
2,代码生成机制,数据解析类自动生成
3,支持向后兼容和向前兼容
4,支持多种编程语言(java,c++,python)
三、简单的将protobuf与xml进行对比一下:
ProtocolBuffer拥有多项比XML更高级的串行化结构数据的特性,ProtocolBuffer:
更简单
小3-10倍
快20-100倍
更少的歧义
可以方便的生成数据存取类
例如,让我们看看如何在XML中建模Person的name和email字段:
<person> <name>John Doe</name> <email>jdoe@example.com</email> </person>
[/code]
对应的ProtocolBuffer报文则如下:
#ProtocolBuffer的文本表示 #这不是正常时使用的二进制数据 person { name: "John Doe" email: "jdoe@example.com" }
当这个报文编码到ProtocolBuffer的二进制格式( http://code.google.com/apis/protocolbuffers/docs/encoding.html )时(上面的文本仅用于调试和编辑),它只需要28字节和100-200ns的解析时间。而XML的版本需要69字节(除去空白)和 5000-10000ns的解析时间。
当然,操作ProtocolBuffer也很简单:
cout << "Name: " << person.name() << endl; cout << "E-mail: " << person.email() << endl;
而XML的你需要:
cout << "Name: " << person.getElementsByTagName("name")->item(0)->innerText() << endl; cout << "E-mail: " << person.getElementsByTagName("email")->item(0)->innerText() << end;
当然,ProtocolBuffer并不是在任何时候都比XML更合适,例如ProtocolBuffer无法对一个基于标记文本的文档建模,因为你根本没法方便的在文本中插入结构。另外,XML是便于人类阅读和编辑的,而ProtocolBuffer则不是。还有XML是自解释的,而 ProtocolBuffer仅在你拥有报文格式定义的 .proto 文件时才有意义。
相关文章推荐
- windows下并发I/O服务器模型对比(一)
- Jquery ajax方法解析返回的json数据
- ios 旋转手势
- 第一篇技术博客
- 数组名与数组名前加取地址符
- 为什么你必须得学些 TCP/IP 的知识?
- Spring的scope属性
- 如何写简历?
- 缓存穿透与缓存雪崩
- Windows7系统下svn图标不显示的完美解决方法
- 米兔故事机总结
- 关于Mysql的mysql.sock文件
- 关于unity中的update、Lateupdate和FixedUpdate
- Servlet如何从浏览器的表单获取中文信息并保存到磁盘的xml文档中不出现乱码
- ios 缩放手势
- easyui为tabs添加右键菜单
- 安卓开发之百度地图定位
- linux常用命令及学习小结(2)--压缩、挂载、文件编辑
- 基于 AXIS2/C 的 C 语言库实现对提供 REST API 的系统进行数据访问
- php新手----Coderigniter/CI框架去除index.php