欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Android >内容正文

Android

【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 源码分析 | 创建 Protobuf 对象 )

发布时间:2025/6/17 Android 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 源码分析 | 创建 Protobuf 对象 ) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 一、Protobuf 源码分析
  • 二、创建 Protobuf 对象
  • 三、完整代码示例
  • 四、参考资料





一、Protobuf 源码分析



Protobuf 源文件如下 : addressbook.proto :

// 指定 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; }

在上一篇博客 【Android Protobuf 序列化】Protobuf 使用 ( protobuf-gradle-plugin 插件简介 | Android Studio 中配置插件 | AS 中编译源文件 ) 中 , 使用了 Gradle 插件 , 自动将 Android Studio 工程中的 Protobuf 编译成了 Java 源码 , 现在开始使用生成的 Java 源码进行开发 ;


在 Protobuf 源码 addressbook.proto 中 , 有一个 AddressBook 类 , 其中有一个 Person 集合 , Person 类中还包含 PhoneNumber 集合 ;





二、创建 Protobuf 对象



创建 Protobuf 对象时 , 先创建对应对象的 Builder 构造器 ;

如果一个复杂的对象由多个对象组成 , 则将它们的 Builder 构造器先拼装起来 , 最后调用一次 build 方法 , 创建最终的复杂对象 ; 每个对象的构造器都是由该对象的 newBuilder 静态方法进行创建 ;


创建 AddressBook 对象 , 每个 AddressBook 对象中包含若干 Person 对象 , 每个 Person 对象中包含 若干 PhoneNumber 枚举值 , 如果对象的某字段在 Protobuf 源码中被 required 修饰 , 则该字段必须被赋值 ;


首先要创建 PhoneNumber 构造器 ,

// 创建 Person.PhoneNumber.Builder 对象 var phoneNumber1Builder: Person.PhoneNumber.Builder =Person.PhoneNumber.newBuilder().setNumber("666")

然后创建 Person 构造器 : 创建 Person 构造器时 , 可以将 PhoneNumber 构造器拼装进来 ,

// 创建 Person.Builder 对象 var person1Builder: Person.Builder =Person.newBuilder().setName("Tom").setId(0).addPhones(phoneNumber1Builder)

之后创建 AddressBook 构造器 : 创建时可以将多个 Person 构造器拼装进来 ,

// 使用 newBuilder 方法创建 AddressBook.Builder 对象 var addressBookBuilder: AddressBook.Builder =AddressBook.newBuilder().addPeople(person1Builder).addPeople(person2Builder)

最终 , 调用 AddressBook.Builder 这个拼装后最大的构造器的 build 方法 , 创建 AddressBook 对象 ;





三、完整代码示例



完整代码示例 :

package kim.hsl.protobufimport androidx.appcompat.app.AppCompatActivity import android.os.Bundle import com.example.tutorial.protos.AddressBook import com.example.tutorial.protos.Personclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 创建 Person.PhoneNumber.Builder 对象var phoneNumber1Builder: Person.PhoneNumber.Builder =Person.PhoneNumber.newBuilder().setNumber("666")// 创建 Person.Builder 对象var person1Builder: Person.Builder =Person.newBuilder().setName("Tom").setId(0).addPhones(phoneNumber1Builder)// 创建 Person.PhoneNumber.Builder 对象var phoneNumber2Builder: Person.PhoneNumber.Builder =Person.PhoneNumber.newBuilder().setNumber("888")// 创建 Person.Builder 对象var person2Builder: Person.Builder =Person.newBuilder().setName("Jerry").setId(1).addPhones(phoneNumber2Builder)// 使用 newBuilder 方法创建 AddressBook.Builder 对象var addressBookBuilder: AddressBook.Builder =AddressBook.newBuilder().addPeople(person1Builder).addPeople(person2Builder)// 将上述各个 Builder 拼装完毕后 , 最后调用 build// 即可得到最终对象var addressBook: AddressBook = addressBookBuilder.build()}}



四、参考资料



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://developers.google.com/protocol-buffers/docs/downloads

  • Protobuf 源码地址 : https://github.com/protocolbuffers/protobuf

  • Protobuf 发布版本下载地址 : https://github.com/protocolbuffers/protobuf/releases

  • protobuf-gradle-plugin 项目地址 : https://github.com/google/protobuf-gradle-plugin

博客源码 :

  • GitHub 地址 : https://github.com/han1202012/Protocol_Buffers
  • CSDN 快照 : https://download.csdn.net/download/han1202012/18181938

总结

以上是生活随笔为你收集整理的【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 源码分析 | 创建 Protobuf 对象 )的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。