友声网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
开启左侧

Google推出Protocol Buffers:争夺网络时代数据格式

[复制链接]
vikingr 发表于 2010-4-22 13:16 | 显示全部楼层 |阅读模式
<p>在Web 2.0 时代,XML格式由于AJAX的风行以及RSS的普及而异军突起。不过随着Python和Ruby On Rails的走红,以及各种API的发布,YAML,JSON也逐渐成名。此次,Google推出了Protocol Buffers,是想让广大编程者方便地使用Google网络传输数据的格式。</p><p>什么是Protocol Buffers?</p><p>这是Protocol Buffers主页上的一段代码:</p><p>message Person {<br />required string name = 1;<br />required int32 id = 2;<br />optional string email = 3;</p><p>enum PhoneType {<br />MOBILE = 0;<br />HOME = 1;<br />WORK = 2;<br />} message PhoneNumber {<br />required string number = 1;<br />optional PhoneType type = 2 [default = HOME];<br />}</p><p>repeated PhoneNumber phone = 4;<br />}</p><p>而Protocol Buffers的作用,就是将以上格式的数据类型,自动生成Java, Python, and C++的代码,然后以下一系列代码就可以直接调用了:(C++中)</p><p>Person person;<br />person.set_name(&quot;John Doe&quot;);<br />person.set_id(1234);<br />person.set_email(&quot;[email protected]&quot;);<br />fstream output(&quot;myfile&quot;, ios::out | ios::binary);<br />person.SerializeToOstream(&amp;output); fstream input(&quot;myfile&quot;, ios::in | ios::binary);<br />Person person;<br />person.ParseFromIstream(&amp;input);<br />cout &lt;&lt; &quot;Name: &quot; &lt;&lt; person.name() &lt;&lt; endl;<br />cout &lt;&lt; &quot;E-mail: &quot; &lt;&lt; person.email() &lt;&lt; endl;</p><p>相信所有C++编程者都为定义set,get之类的函数感到烦人过吧,而Google做的就是帮助你省去这些麻烦,构造更利于网络传输的数据结构。</p><p>与XML的比较 优势</p><p>更简单 <br />比XML小3到10倍体积 <br />比XML快20到100倍 <br />更不容易引起歧义 <br />自动生成可编程的类代码 <br />比较:<br />cout &lt;&lt; &quot;Name: &quot; &lt;&lt; person.name() &lt;&lt; endl;</p><p>cout &lt;&lt; &quot;E-mail: &quot; &lt;&lt; person.email() &lt;&lt; endl; <br />cout &lt;&lt; &quot;Name: &quot; <br />      &lt;&lt; person.getElementsByTagName(&quot;name&quot;)-&gt;item(0)-&gt;innerText() <br />      &lt;&lt; endl;<br />cout &lt;&lt; &quot;E-mail: &quot;<br />      &lt;&lt; person.getElementsByTagName(&quot;email&quot;)-&gt;item(0)-&gt;innerText()<br />      &lt;&lt; endl; 劣势</p><p>没有层次,所以无法和HTML标记语言打交道 <br />如果没有message的定义,根本无法知道message的意思,而XML是自解释型的。<br /><a target="_blank" href="http://code.google.com/p/protobuf/downloads/">Protocol Buffer下载</a></p><p>新闻来源:<a target="_blank" href="http://code.google.com/apis/protocolbuffers/docs/overview.html">Google Code</a></p>

RSS|无图版|手机版|友声网 ( 鲁ICP备15020090号-1 )|网站地图 | | 点击这里给我发消息 |

GMT+8, 2024-11-21 17:27 , Processed in 0.016564 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X

© ys166.com

快速回复 返回顶部 返回列表