【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 序列化 | Protobuf 反序列化 )
文章目錄
- 一、Protobuf 序列化
- 二、Protobuf 反序列化
- 三、完整代碼
- 四、參考資料
一、Protobuf 序列化
在上一篇博客 【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 源碼分析 | 創(chuàng)建 Protobuf 對(duì)象 ) 中 , 創(chuàng)建了 Protobuf 對(duì)象 , 本博客中將其序列化 , 保存到本地文件中 ;
序列化操作 : 調(diào)用 Protobuf 對(duì)象的 toByteArray 方法 , 可以將對(duì)象序列化為字節(jié)數(shù)組 ;
// 將 addressBook 對(duì)象轉(zhuǎn)為字節(jié)數(shù)組var bytes: ByteArray = addressBook.toByteArray()序列化操作代碼示例 :
// 序列化操作var serializeStart = System.currentTimeMillis()// 將 addressBook 對(duì)象轉(zhuǎn)為字節(jié)數(shù)組var bytes: ByteArray = addressBook.toByteArray()Log.i(TAG, "序列化耗時(shí) ${System.currentTimeMillis() - serializeStart} ms , 序列化大小 ${bytes.size} 字節(jié)")日志打印結(jié)果 :
2021-04-27 10:11:17.053 10000-10000/kim.hsl.protobuf I/MainActivity: 序列化耗時(shí) 4 ms , 序列化大小 34 字節(jié)二、Protobuf 反序列化
反序列化操作 : 調(diào)用 Protobuf 對(duì)象的 parseFrom 方法 , 傳入字節(jié)數(shù)組作為參數(shù) , 可以字節(jié)數(shù)組反序列化為 Protobuf 對(duì)象 ;
var deserializeAddressBook: AddressBook = AddressBook.parseFrom(bytes)反序列化操作代碼示例 :
// 反序列化操作var deserializeStart = System.currentTimeMillis()var deserializeAddressBook: AddressBook = AddressBook.parseFrom(bytes)Log.i(TAG, "反序列化耗時(shí) ${System.currentTimeMillis() - serializeStart} ms")日志打印結(jié)果 :
2021-04-27 10:11:17.056 10000-10000/kim.hsl.protobuf I/MainActivity: 反序列化耗時(shí) 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 對(duì)象var phoneNumber1Builder: Person.PhoneNumber.Builder =Person.PhoneNumber.newBuilder().setNumber("666")// 創(chuàng)建 Person.Builder 對(duì)象var person1Builder: Person.Builder =Person.newBuilder().setName("Tom").setId(0).addPhones(phoneNumber1Builder)// 創(chuàng)建 Person.PhoneNumber.Builder 對(duì)象var phoneNumber2Builder: Person.PhoneNumber.Builder =Person.PhoneNumber.newBuilder().setNumber("888")// 創(chuàng)建 Person.Builder 對(duì)象var person2Builder: Person.Builder =Person.newBuilder().setName("Jerry").setId(1).addPhones(phoneNumber2Builder)// 使用 newBuilder 方法創(chuàng)建 AddressBook.Builder 對(duì)象var addressBookBuilder: AddressBook.Builder =AddressBook.newBuilder().addPeople(person1Builder).addPeople(person2Builder)// 將上述各個(gè) Builder 拼裝完畢后 , 最后調(diào)用 build// 即可得到最終對(duì)象var addressBook: AddressBook = addressBookBuilder.build()// 序列化操作var serializeStart = System.currentTimeMillis()// 將 addressBook 對(duì)象轉(zhuǎn)為字節(jié)數(shù)組var bytes: ByteArray = addressBook.toByteArray()Log.i(TAG, "序列化耗時(shí) ${System.currentTimeMillis() - serializeStart} ms , 序列化大小 ${bytes.size} 字節(jié)")// 反序列化操作var deserializeStart = System.currentTimeMillis()var deserializeAddressBook: AddressBook = AddressBook.parseFrom(bytes)Log.i(TAG, "反序列化耗時(shí) ${System.currentTimeMillis() - serializeStart} ms")}}執(zhí)行結(jié)果 :
2021-04-27 10:11:17.053 10000-10000/kim.hsl.protobuf I/MainActivity: 序列化耗時(shí) 4 ms , 序列化大小 34 字節(jié) 2021-04-27 10:11:17.056 10000-10000/kim.hsl.protobuf I/MainActivity: 反序列化耗時(shí) 7 ms四、參考資料
Protobuf 參考資料 :
-
Protobuf 官網(wǎng)主頁 : https://developers.google.com/protocol-buffers
-
Protobuf 語法指南 : https://developers.google.com/protocol-buffers/docs/proto
-
Protobuf Java 語言對(duì)應(yīng)用法 : 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 項(xiàng)目地址 : 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 反序列化 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android Protobuf 序列
- 下一篇: 【错误记录】Android 应用 rel