google protocol buffers 开发者指南

来源:互联网 发布:悟空问答 知乎 编辑:程序博客网 时间:2024/05/14 05:07

  译自 https://developers.google.com/protocol-buffers/docs/overview

Protocol Buffers提供了语言中立、平台中立,并且可扩展的序列化结构数据以用于通信协议、数据存储等的方法。只需要定义一次数据结构,就可以简单地使用特别生成的源代码来使用各种语言,从各种数据流读写结构数据。甚至可以更新数据结构,而不影响已经发布的、使用旧格式的程序。

Protocol Buffers是如何工作的?

1.1 编写.proto文件

    在.proto文件中定义protocol buffer消息格式。protocol buffer消息是一个小的逻辑记录,包含一系列名字-值对。

    google <wbr>protocol <wbr>buffers <wbr>开发者指南

    消息格式很简单:每个消息可以包含一个或者多个具有唯一编号的字段,每个字段可以有名字和值类型,而值类型可以是数值(整数或者浮点数)、布尔值、字符串、原始字节,甚至可以是其他消息类型,以便构成数据层次。可以指定字段是可选的、必须的、重复的。

1.2 编译.proto文件

    根据应用程序使用的编程语言,使用protocol buffer编译器编译.proto文件,生成数据访问类。数据访问类为每个字段提供了简单的访问器(如query()和set_query()),为整个结构提供了序列化/解析方法。例如,对于前面的Person定义,可以使用下列代码进行序列化:

    google <wbr>protocol <wbr>buffers <wbr>开发者指南

    而使用下述代码进行解析:

    google <wbr>protocol <wbr>buffers <wbr>开发者指南

    可以在消息格式中添加新的字段而不破坏向后兼容性:旧的可执行程序在解析的时候会简单地忽略新的字段。

为什么不使用XML?

    相比于XML,protocol buffers有下述优点:

· 更简单

· 小3到10倍

· 快20到100倍

· 二义性较少

· 生成的数据访问类容易用于编程

    例如,用XML定义一个包含name和email的person模型:

    google <wbr>protocol <wbr>buffers <wbr>开发者指南

    而protocol buffer的定义则为(text_format):

    google <wbr>protocol <wbr>buffers <wbr>开发者指南

    上述消息编码成protocol buffer二进制格式(上述文本格式只是为了方便人类读取,用于调试和编辑)后大概有28字节长,解析耗时100到200纳秒。而移除空白后的XML格式至少为69字节,解析耗时5000到10000纳秒。

 

    此外,操作protocol buffer更简单:

    google <wbr>protocol <wbr>buffers <wbr>开发者指南

    而XML操作代码可能是:

    google <wbr>protocol <wbr>buffers <wbr>开发者指南

   

    然而,protocol buffers并不总是比XML好。比如说,protocol buffers就不适合用于表达带标记的基于文本的文档(如HTML)。此外,XML便于人类阅读和编辑,而protocol buffer,至少是其原始格式,是不适于人类阅读和编辑的。XML也是自描述的。而protocol buffer只在你有消息定义(.proto文件)的时候才有意义。

如何开始?

    下载安装包。安装包包含用于Java、Python、C++的完整源代码,以及C++编译器和用于IO与测试的类。根据README的指示,构建和安装编译器。

    设置好之后,阅读用于你选定的语言的概述文档,它会引导你创建一个使用protocol buffers的简单应用。

0 0