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

歡迎訪問 生活随笔!

生活随笔

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

Android

【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 序列化 | Protobuf 反序列化 )

發(fā)布時間:2025/6/17 Android 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 序列化 | Protobuf 反序列化 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、Protobuf 序列化
  • 二、Protobuf 反序列化
  • 三、完整代碼
  • 四、參考資料





一、Protobuf 序列化



在上一篇博客 【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 源碼分析 | 創(chuàng)建 Protobuf 對象 ) 中 , 創(chuàng)建了 Protobuf 對象 , 本博客中將其序列化 , 保存到本地文件中 ;


序列化操作 : 調(diào)用 Protobuf 對象的 toByteArray 方法 , 可以將對象序列化為字節(jié)數(shù)組 ;

// 將 addressBook 對象轉(zhuǎn)為字節(jié)數(shù)組var bytes: ByteArray = addressBook.toByteArray()

序列化操作代碼示例 :

// 序列化操作var serializeStart = System.currentTimeMillis()// 將 addressBook 對象轉(zhuǎn)為字節(jié)數(shù)組var bytes: ByteArray = addressBook.toByteArray()Log.i(TAG, "序列化耗時 ${System.currentTimeMillis() - serializeStart} ms , 序列化大小 ${bytes.size} 字節(jié)")

日志打印結(jié)果 :

2021-04-27 10:11:17.053 10000-10000/kim.hsl.protobuf I/MainActivity: 序列化耗時 4 ms , 序列化大小 34 字節(jié)



二、Protobuf 反序列化



反序列化操作 : 調(diào)用 Protobuf 對象的 parseFrom 方法 , 傳入字節(jié)數(shù)組作為參數(shù) , 可以字節(jié)數(shù)組反序列化為 Protobuf 對象 ;

var deserializeAddressBook: AddressBook = AddressBook.parseFrom(bytes)

反序列化操作代碼示例 :

// 反序列化操作var deserializeStart = System.currentTimeMillis()var deserializeAddressBook: AddressBook = AddressBook.parseFrom(bytes)Log.i(TAG, "反序列化耗時 ${System.currentTimeMillis() - serializeStart} ms")

日志打印結(jié)果 :

2021-04-27 10:11:17.056 10000-10000/kim.hsl.protobuf I/MainActivity: 反序列化耗時 7 ms



三、完整代碼



完整代碼示例 :

package kim.hsl.protobufimport androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import com.example.tutorial.protos.AddressBook import com.example.tutorial.protos.Personclass MainActivity : AppCompatActivity() {companion object{val TAG = "MainActivity"}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 創(chuàng)建 Person.PhoneNumber.Builder 對象var phoneNumber1Builder: Person.PhoneNumber.Builder =Person.PhoneNumber.newBuilder().setNumber("666")// 創(chuàng)建 Person.Builder 對象var person1Builder: Person.Builder =Person.newBuilder().setName("Tom").setId(0).addPhones(phoneNumber1Builder)// 創(chuàng)建 Person.PhoneNumber.Builder 對象var phoneNumber2Builder: Person.PhoneNumber.Builder =Person.PhoneNumber.newBuilder().setNumber("888")// 創(chuàng)建 Person.Builder 對象var person2Builder: Person.Builder =Person.newBuilder().setName("Jerry").setId(1).addPhones(phoneNumber2Builder)// 使用 newBuilder 方法創(chuàng)建 AddressBook.Builder 對象var addressBookBuilder: AddressBook.Builder =AddressBook.newBuilder().addPeople(person1Builder).addPeople(person2Builder)// 將上述各個 Builder 拼裝完畢后 , 最后調(diào)用 build// 即可得到最終對象var addressBook: AddressBook = addressBookBuilder.build()// 序列化操作var serializeStart = System.currentTimeMillis()// 將 addressBook 對象轉(zhuǎn)為字節(jié)數(shù)組var bytes: ByteArray = addressBook.toByteArray()Log.i(TAG, "序列化耗時 ${System.currentTimeMillis() - serializeStart} ms , 序列化大小 ${bytes.size} 字節(jié)")// 反序列化操作var deserializeStart = System.currentTimeMillis()var deserializeAddressBook: AddressBook = AddressBook.parseFrom(bytes)Log.i(TAG, "反序列化耗時 ${System.currentTimeMillis() - serializeStart} ms")}}

執(zhí)行結(jié)果 :

2021-04-27 10:11:17.053 10000-10000/kim.hsl.protobuf I/MainActivity: 序列化耗時 4 ms , 序列化大小 34 字節(jié) 2021-04-27 10:11:17.056 10000-10000/kim.hsl.protobuf I/MainActivity: 反序列化耗時 7 ms



四、參考資料



Protobuf 參考資料 :

  • Protobuf 官網(wǎng)主頁 : 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 發(fā)布版本下載地址 : 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

總結(jié)

以上是生活随笔為你收集整理的【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 序列化 | Protobuf 反序列化 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。