注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

周宁(梦里秦淮)的博客

珍惜IT,远离八卦

 
 
 

日志

 
 
关于我

宁哲网络科技创始人。曾任365地产家居网首席策略研发师,研发中心主任,首席框架设计师。专注于社区与电子商务领域。

网易考拉推荐
 
 

Google新闻:Protocol Buffers数据格式,对抗XML  

2008-07-08 22:50:06|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

转载:

 

在Web 2.0 时代,XML格式由于AJAX的风行以及RSS的普及而异军突起。不过随着Python和Ruby OnRails的走红,以及各种API的发布,YAML,JSON也逐渐成名。此次,Google推出了ProtocolBuffers,是想让广大编程者方便地使用Google网络传输数据的格式。

什么是ProtocolBuffers?

这是Protocol Buffers主页上的一段代码:

message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;

enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
} message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}

repeated PhoneNumber phone = 4;
}

而Protocol Buffers的作用,就是将以上格式的数据类型,自动生成Java, Python, andC++的代码,然后以下一系列代码就可以直接调用了:(C++中)

Person person;
person.set_name("John Doe");
person.set_id(1234);
person.set_email("jdoe@example.com");
fstream output("myfile", ios::out | ios::binary);
person.SerializeToOstream(&output); fstreaminput("myfile", ios::in | ios::binary);
Person person;
person.ParseFromIstream(&input);
cout << "Name: "<< person.name()<< endl;
cout << "E-mail: "<< person.email()<< endl;

相信所有C++编程者都为定义set,get之类的函数感到烦人过吧,而Google做的就是帮助你省去这些麻烦,构造更利于网络传输的数据结构。

与XML的比较 优势

  • 更简单
  • 比XML小3到10倍体积
  • 比XML快20到100倍
  • 更不容易引起歧义
  • 自动生成可编程的类代码
    比较:
    cout << "Name: "<< person.name()<< endl;

    cout << "E-mail: "<< person.email()<< endl;
    cout << "Name: "
          <<person.getElementsByTagName("name")->item(0)->innerText()
          << endl;
    cout << "E-mail: "
          <<person.getElementsByTagName("email")->item(0)->innerText()
          << endl; 劣势
  • 没有层次,所以无法和HTML标记语言打交道
  • 如果没有message的定义,根本无法知道message的意思,而XML是自解释型的。
    ProtocolBuffer主页   Protocol Buffer下载
  评论这张
 
阅读(97)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017