前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 使用文档 | 创建 Protobuf 源文件 | Protobuf 语法 )

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

作者头像
韩曙亮
发布2023-03-29 10:31:05
1K0
发布2023-03-29 10:31:05
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、Protobuf 使用文档


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

在这里插入图片描述
在这里插入图片描述

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

二、创建 Protobuf 源文件


首先 , 编写 Protobuf 源文件 , 使用官方提供的源文件 , 进行开发 ;

代码语言:javascript
复制
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 两个版本 , 这两个版本之间的 语法 , 与 底层实现 都有一定的不同 ;

代码语言:javascript
复制
syntax = "proto2";

设置生成 Java 源文件的包名和类名 :

代码语言:javascript
复制
// 生成 Java 源文件包名
option java_package = "com.example.tutorial.protos";
// 生成 Java 源文件类名
option java_outer_classname = "AddressBookProtos";

设置生成 Java 类 : message 相当于 Java 中的 class , 编译出的源文件就是 class Person{} ;

代码语言:javascript
复制
// message 相当于 Java 中的 class
// 编译出的源文件就是 class Person{}
message Person {

设置生成 Java 类的字段名称 : 字段前有 optional 和 required 修饰 , 如果被 required 修饰 , 表示该字段不能为空 ; 被 optional 修饰 , 表示可选的 , 可以设置为空 ;

在创建后 , 会检测被 required 修饰的字段 , 如果没有赋初值 , 就会报错 ;

代码语言:javascript
复制
  // String 类型的字段
  // 字段前有 optional 和 required 修饰
  optional string name = 1;
  optional int32 id = 2;
  optional string email = 3;

枚举值 : Protobuf 中设置枚举与 Java 相同 , 定义和使用的用法如下 ;

代码语言:javascript
复制
  // 枚举
  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    optional string number = 1;
    // 字段值是枚举类型, 默认是 HOME 类型
    optional PhoneType type = 2 [default = HOME];
  }

集合 : 使用 repeated 修饰字段 , 表示重复的数据 , 即集合 ;

代码语言:javascript
复制
  // 表示重复的数据 , 即集合
  // 有多个 PhoneNumber phones 组成的集合
  repeated PhoneNumber phones = 4;

完整带注释的 Protobuf 源文件 :

代码语言:javascript
复制
// 指定 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 参考资料 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Protobuf 使用文档
  • 二、创建 Protobuf 源文件
  • 三、Protobuf 语法
  • 四、参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档