Protocol Buffers
介绍主题
l Protocol Buffers简介
l 定义一个.proto文件
l Message的使用
l 消息的编码机制
l 使用时注意事项
什么是ProtocolBuffers?
l Google定义的一种序列化的协议格式;
l Google内部几乎所有的RPC调用及文件格式;
(据称当前google已经定义了12,183个.proto文件,共有48,162种不同的message类型。它们用于RPC系统或各种存储系统中进行数据的存储)
l 目标:
Ø 简单性
Ø 兼容性
Ø 高性能
XML与Protobuf的比较
易读性 <->二进制格式;
自描述语言 <->没有.proto文件根据就是无用的;
文件大<-> 文件小(3-10倍);
解析及序列化较慢<->快(20- 100倍);
.xsd(复杂)<->.proto(简单,无二义性);
访问简单<->访问容易;
示例如下:
<person> <name>John Doe</name> <email>jdoe@example.com</email> </person> (== 69 bytes, 510ms to parse) System.out.println(person.getElementsByTagName("name").getElementText()); System.out.println(person.getElementsByTagName("email").getElementText()); |
Person { name: "John Doe" email: "jdoe@example.com" } (== 28 bytes, 100200ns to parse) System.out.println(person.name()); System.out.println(person.email()); |
message示例
package tutorial; option java_package = "com.example.tutorial"; option java_outer_classname = "AddressBookProtos";
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 AddressBook { repeated Person person = 1; } |