01.Google Protocol Buffers简介
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的优势
相对XML
、JSON
而言,Protocol Buffers
序列化与反序列化的过程更快,生成的二进制流更小,同时,可以跟据message定义文件(.proto
文件)生成Module代码。
Protocol Buffers的劣势
二进制流不可读。
Protocol Buffers语法版本
Protocol Buffers
有两个语言版本:v2
与 v3
。使用 v3
标准时,需要在.proto
文件中指定版本,使用v2
标准时,可以省略。
指定v3
版本
syntax="proto3";
v3
与 v2
在语法上有一些区别。在编写.proto
文件时需要注意区别,后面的内容,使用的版本是v3
,对 v2
就不做过多介绍