文章目录
一、Protobuf 使用文档
二、创建 Protobuf 源文件
三、Protobuf 语法
四、参考资料
一、Protobuf 使用文档
Protobuf Java 语言对应用法 : https://developers.google.com/protocol-buffers/docs/javatutorial
使用时 , 参考上述页面的文档说明 , 进行开发 ;
二、创建 Protobuf 源文件
首先 , 编写 Protobuf 源文件 , 使用官方提供的源文件 , 进行开发 ;
syntax = "proto2"; package tutorial; option java_multiple_files = true; option java_package = "com.example.tutorial.protos"; option java_outer_classname = "AddressBookProtos"; message Person { optional string name = 1; optional int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { optional string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phones = 4; } message AddressBook { repeated Person people = 1; }
在 Android Studio 工程中的 " app/src/main " 目录下 , 创建 proto 目录 , 在该 " app/src/main/proto " 目录下 , 创建 " addressbook.proto " 源文件 ;
将官方的 proto 示例源码拷贝到该文件中 ;
( 上图的源码添加了注释 )
三、Protobuf 语法
设置 protobuf 语法版本 : Protocol Buffers 有 proto2 和 proto3 两个版本 , 这两个版本之间的 语法 , 与 底层实现 都有一定的不同 ;
syntax = "proto2";
设置生成 Java 源文件的包名和类名 :
// 生成 Java 源文件包名 option java_package = "com.example.tutorial.protos"; // 生成 Java 源文件类名 option java_outer_classname = "AddressBookProtos";
设置生成 Java 类 : message 相当于 Java 中的 class , 编译出的源文件就是 class Person{} ;
// message 相当于 Java 中的 class // 编译出的源文件就是 class Person{} message Person {
设置生成 Java 类的字段名称 : 字段前有 optional 和 required 修饰 , 如果被 required 修饰 , 表示该字段不能为空 ; 被 optional 修饰 , 表示可选的 , 可以设置为空 ;
在创建后 , 会检测被 required 修饰的字段 , 如果没有赋初值 , 就会报错 ;
// String 类型的字段 // 字段前有 optional 和 required 修饰 optional string name = 1; optional int32 id = 2; optional string email = 3;
枚举值 : Protobuf 中设置枚举与 Java 相同 , 定义和使用的用法如下 ;
// 枚举 enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { optional string number = 1; // 字段值是枚举类型, 默认是 HOME 类型 optional PhoneType type = 2 [default = HOME]; }
集合 : 使用 repeated 修饰字段 , 表示重复的数据 , 即集合 ;
// 表示重复的数据 , 即集合 // 有多个 PhoneNumber phones 组成的集合 repeated PhoneNumber phones = 4;
完整带注释的 Protobuf 源文件 :
// 指定 Protocol Buffers 语法版本 syntax = "proto2"; package tutorial; option java_multiple_files = true; // 生成 Java 源文件包名 option java_package = "com.example.tutorial.protos"; // 生成 Java 源文件类名 option java_outer_classname = "AddressBookProtos"; // message 相当于 Java 中的 class // 编译出的源文件就是 class Person{} message Person { // String 类型的字段 // 字段前有 optional 和 required 修饰 optional string name = 1; // int 整型 , 32 位 optional int32 id = 2; optional string email = 3; // 枚举 enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { optional string number = 1; // 字段值是枚举类型, 默认是 HOME 类型 optional PhoneType type = 2 [default = HOME]; } // 表示重复的数据 , 即集合 // 有多个 PhoneNumber phones 组成的集合 repeated PhoneNumber phones = 4; } message AddressBook { repeated Person people = 1; }
四、参考资料
Protobuf 参考资料 :
Protobuf 官网主页 : https://developers.google.com/protocol-buffers
Protobuf 语法指南 : https://developers.google.com/protocol-buffers/docs/proto
Protobuf Java 语言对应用法 : https://developers.google.com/protocol-buffers/docs/javatutorial
Protobuf 源码地址 : https://github.com/protocolbuffers/protobuf