Protocol Buffers的简单介绍

16年3月写的一篇文章,迁移到csdn上面来。

----------------------------


最近在做数据传输的相关内容时接触到了PB,发现这个技术已经在互联网领域大规模使用了,做了个小小专题,

第一步:看官网

官网地址: 
https://developers.google.com/protocol-buffers/?hl=zh-CN 
PS.官网主要是英文的

什么是PB?

ProtoBuf(protocol buffers、PB)是一款开源项目,是google提供的一种将结构化数据进行序列化和反序列化的方法(数据变成二进制的)。大约在2008年的时候,谷歌把ProtoBuf贡献给了开源社区,在随后不到1年的时间里,该款产品的用户使用量猛增。类似的概念有xml、json。国内淘宝、微信等都大规模使用PB,产生大量经典案例。

为什么要用PB?

PB的优点:语言中立,平台中立,可扩展性好。重要的是与xml相比:smaller, faster, and simpler! 
xml一直以性能不足,功能冗余而出名。对于一些PB级别的海量业务而言,使用xml无意是非常不情愿的状态,这也就是google弃用XMl转而制造出PB的原因。 
像 Java, Python, and C++等语言都是可以使用的。用户只要按照proto语法在.proto文件中定义好数据的结构,就可以使用PB提供的工具(protoc)自动生成处理数据的代码,使用这些代码就能在程序中方便的通过各种数据流读写数据。

.proto数据结构

官网给出了三种数据结构形式 
形式1:

 
 
    1. message Person {
    2. required string name = 1;
    3. required int32 id = 2;
    4. optional string email = 3;
    5. }

形式2:

 
 
    1. Person john = Person.newBuilder()
    2. .setId(1234)
    3. .setName("John Doe")
    4. .setEmail("jdoe@example.com")
    5. .build();
    6. output = new FileOutputStream(args[0]);
    7. john.writeTo(output);

形式3:

 
 
    1. Person john;
    2. fstream input(argv[1],
    3. ios::in | ios::binary);
    4. john.ParseFromIstream(&input);
    5. id = john.id();
    6. name = john.name();
    7. email = john.email();

由数据结构来看,可以发现PB还有一下优点: 
1.向后兼容性更好。在依靠老数据结构程序的基础上,对数据结构进行升级时,在添加新消息里的field并不会引起已发布程序的任何改变。 
2.语义更清楚 
3.无需学习复杂的文档对象模型,编程模式更加友好

后续:

PB的python实践 
PB与xml、json的深度比较 
动态消息下的PB 
PB适合的领域

参考资料:

http://www.searchtb.com/2012/09/protocol-buffers.html 
https://developers.google.com/protocol-buffers/docs/pythontutorial?hl=zh-CN#parsing-and-serialization

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值