前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 序列化 | Protobuf 反序列化 )

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

作者头像
韩曙亮
发布2023-03-29 10:33:00
6870
发布2023-03-29 10:33:00
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、Protobuf 序列化


在上一篇博客 【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 源码分析 | 创建 Protobuf 对象 ) 中 , 创建了 Protobuf 对象 , 本博客中将其序列化 , 保存到本地文件中 ;

序列化操作 : 调用 Protobuf 对象的 toByteArray 方法 , 可以将对象序列化为字节数组 ;

代码语言:javascript
复制
        // 将 addressBook 对象转为字节数组
        var bytes: ByteArray = addressBook.toByteArray()

序列化操作代码示例 :

代码语言:javascript
复制
        // 序列化操作
        var serializeStart = System.currentTimeMillis()

        // 将 addressBook 对象转为字节数组
        var bytes: ByteArray = addressBook.toByteArray()

        Log.i(TAG, "序列化耗时 ${System.currentTimeMillis() - serializeStart} ms , 序列化大小 ${bytes.size} 字节")

日志打印结果 :

代码语言:javascript
复制
2021-04-27 10:11:17.053 10000-10000/kim.hsl.protobuf I/MainActivity: 序列化耗时 4 ms , 序列化大小 34 字节

二、Protobuf 反序列化


反序列化操作 : 调用 Protobuf 对象的 parseFrom 方法 , 传入字节数组作为参数 , 可以字节数组反序列化为 Protobuf 对象 ;

代码语言:javascript
复制
var deserializeAddressBook: AddressBook = AddressBook.parseFrom(bytes)

反序列化操作代码示例 :

代码语言:javascript
复制
        // 反序列化操作
        var deserializeStart = System.currentTimeMillis()

        var deserializeAddressBook: AddressBook = AddressBook.parseFrom(bytes)

        Log.i(TAG, "反序列化耗时 ${System.currentTimeMillis() - serializeStart} ms")

日志打印结果 :

代码语言:javascript
复制
2021-04-27 10:11:17.056 10000-10000/kim.hsl.protobuf I/MainActivity: 反序列化耗时 7 ms

三、完整代码


完整代码示例 :

代码语言:javascript
复制
package kim.hsl.protobuf

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.example.tutorial.protos.AddressBook
import com.example.tutorial.protos.Person

class MainActivity : AppCompatActivity() {
    companion object{
        val TAG = "MainActivity"
    }

    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()

        // 序列化操作
        var serializeStart = System.currentTimeMillis()

        // 将 addressBook 对象转为字节数组
        var bytes: ByteArray = addressBook.toByteArray()

        Log.i(TAG, "序列化耗时 ${System.currentTimeMillis() - serializeStart} ms , 序列化大小 ${bytes.size} 字节")


        // 反序列化操作
        var deserializeStart = System.currentTimeMillis()

        var deserializeAddressBook: AddressBook = AddressBook.parseFrom(bytes)

        Log.i(TAG, "反序列化耗时 ${System.currentTimeMillis() - serializeStart} ms")
    }

}

执行结果 :

代码语言:javascript
复制
2021-04-27 10:11:17.053 10000-10000/kim.hsl.protobuf I/MainActivity: 序列化耗时 4 ms , 序列化大小 34 字节
2021-04-27 10:11:17.056 10000-10000/kim.hsl.protobuf I/MainActivity: 反序列化耗时 7 ms

四、参考资料


Protobuf 参考资料 :

博客源码 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Protobuf 序列化
  • 二、Protobuf 反序列化
  • 三、完整代码
  • 四、参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档