【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月前
|
XML JSON 编解码
从JSON到Protobuf,深入序列化方案的选型与原理
序列化是数据跨边界传输的“翻译官”,将结构化数据转为二进制流。JSON可读性强但冗余大,Protobuf高效紧凑、性能优越,成主流选择。不同场景需权衡标准化与定制优化,选最合适方案。
426 3
|
XML 存储 JSON
(十二)探索高性能通信与RPC框架基石:Json、ProtoBuf、Hessian序列化详解
如今这个分布式风靡的时代,网络通信技术,是每位技术人员必须掌握的技能,因为无论是哪种分布式技术,都离不开心跳、选举、节点感知、数据同步……等机制,而究其根本,这些技术的本质都是网络间的数据交互。正因如此,想要构建一个高性能的分布式组件/系统,不得不思考一个问题:怎么才能让数据传输的速度更快?
1011 1
|
Java 开发工具 Android开发
Android Studio 导出JavaDoc文档
Android Studio 导出JavaDoc文档
624 0
|
Java 开发工具 Maven
Android SDK开发的那些事(1),已整理成文档
Android SDK开发的那些事(1),已整理成文档
|
JSON Android开发 数据格式
android 使用GSON 序列化对象出现字段被优化问题解决方案
android 使用GSON 序列化对象出现字段被优化问题解决方案
466 0
[序列化协议] --- protobuf
[序列化协议] --- protobuf
209 0
protobuf 序列化和反序列化
protobuf 序列化和反序列化
143 0
|
存储 XML JSON
日常小知识点之序列化结构(protobuf使用及简单原理)
日常小知识点之序列化结构(protobuf使用及简单原理)
750 0
|
存储 Java 开发工具
[Android]序列化原理Parcelable
[Android]序列化原理Parcelable
309 0
|
存储 Java Android开发
[Android]序列化原理Serializable
[Android]序列化原理Serializable
246 0

热门文章

最新文章