【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 使用文档 | 创建 Protobuf 源文件 | Protobuf 语法 )

简介: 【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 使用文档 | 创建 Protobuf 源文件 | Protobuf 语法 )

文章目录

一、Protobuf 使用文档

二、创建 Protobuf 源文件

三、Protobuf 语法

四、参考资料





一、Protobuf 使用文档


Protobuf Java 语言对应用法 : https://developers.google.com/protocol-buffers/docs/javatutorial


image.png


使用时 , 参考上述页面的文档说明 , 进行开发 ;






二、创建 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 示例源码拷贝到该文件中 ;

image.png


( 上图的源码添加了注释 )






三、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


目录
相关文章
|
5月前
|
Java 开发工具 Android开发
Android Studio 导出JavaDoc文档
Android Studio 导出JavaDoc文档
176 0
|
6月前
|
Java 开发工具 Maven
Android SDK开发的那些事(1),已整理成文档
Android SDK开发的那些事(1),已整理成文档
|
6月前
|
编解码 缓存 安全
Android SELinux 参数语法介绍及基础分析
Android SELinux 参数语法介绍及基础分析
156 0
|
6月前
|
JSON Android开发 数据格式
android 使用GSON 序列化对象出现字段被优化问题解决方案
android 使用GSON 序列化对象出现字段被优化问题解决方案
118 0
|
6月前
|
存储 Java 开发工具
[Android]序列化原理Parcelable
[Android]序列化原理Parcelable
122 0
|
6月前
|
存储 Java Android开发
[Android]序列化原理Serializable
[Android]序列化原理Serializable
90 0
|
Java Shell 数据处理
Android 根目录下和应用目录下的build.gradle的详解,以及groovy语法的讲解
Android 根目录下和应用目录下的build.gradle的详解,以及groovy语法的讲解
213 0
|
Android开发
Android 中使用Gson进行list集合的序列化与反序列化
Android 中使用Gson进行list集合的序列化与反序列化
187 0
|
JSON Java API
Android 中使用Gson完成对象的序列化与反序列化
Android 中使用Gson完成对象的序列化与反序列化
245 0
|
Java Android开发
【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 序列化 | Protobuf 反序列化 )
【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 序列化 | Protobuf 反序列化 )
256 0