Protocol Buffers 是Google开放的一种灵活、高效、自动化的,语言无关、平台无关、可扩展的数据序列化标准Protocol Buffers适用于数据存储或数据交换。相对XML JSON而言,Protocol Buffers更小、更快、更简单。一旦定义好数据结构,可以在多语言,多平台(可以使用生成器生成源代码)之间读写,传输,解析数据流。

使用Protocol Buffers

Protocol Buffers使用.proto文件定义message数据结构。Protocol Buffers支持的基本数据类型包括:数字(整型,浮点型),布尔值,字符串,原始字节。复合数据类型可以包含其它复合数据类型,字段可以指定为必填字段,可选字段,可重复字段。

来自google的示例

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;
}

一旦定义好message,就可以使用Protocol Buffers编译器生成数据访问类。生成的类可以用于在程序中序列化,或者反序列化message。

当message结构更新时,Protocol Buffers会自动兼容新的message结构。旧的程序在解析新message的流时,会忽略新字段。因此,在Protocol Buffers用于数据传输时,数据提供方的message结构更新时,只要兼容旧的数据结构,数据接收方的程序不需要任何修改。

Protocol Buffers的优势

相对XMLJSON而言,Protocol Buffers序列化与反序列化的过程更快生成的二进制流更小,同时,可以跟据message定义文件(.proto文件)生成Module代码。

Protocol Buffers的劣势

二进制流不可读。

Protocol Buffers语法版本

Protocol Buffers有两个语言版本:v2v3。使用 v3标准时,需要在.proto文件中指定版本,使用v2标准时,可以省略。

指定v3版本

syntax="proto3";

v3v2 在语法上有一些区别。在编写.proto文件时需要注意区别,后面的内容,使用的版本是v3,对 v2 就不做过多介绍

参考链接

Google Protocol Buffers - Developer Guide