日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2025/6/17 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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 对象 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。