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

歡迎訪問 生活随笔!

生活随笔

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

Android

【Android Protobuf 序列化】Protobuf 性能测试 ( fastjson 序列化与反序列化 | gson 序列化与反序列化 | 三种序列化与反序列化性能对比 )

發布時間:2025/6/17 Android 14 豆豆

文章目錄

  • 一、導入依賴庫
  • 二、構造 JavaBean
  • 三、fastjson 序列化與反序列化
  • 四、gson 序列化與反序列化
  • 五、完整代碼
    • 1、主界面代碼
    • 2、JSON 測試代碼
    • 3、執行結果
  • 六、參考資料





一、導入依賴庫



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


導入 fastjson 與 gson 依賴庫 , 即可使用兩個 json 序列化與反序列化 API ;

implementation 'com.google.code.gson:gson:2.8.2'implementation 'com.alibaba:fastjson:1.1.67.android'



二、構造 JavaBean



參考 addressbook.proto 構造 JavaBean ,

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

需要構造 AddressBook , Person , AddressBook 333 個 JavaBean , 構造結果如下 :

class PhoneNumber{enum class PhoneType{MOBILE,HOME,WORK;}var number: String = ""var type: PhoneType = PhoneType.MOBILEconstructor(number: String, type: PhoneType) {this.number = numberthis.type = type} }class Person{lateinit var name: Stringvar id: Int = 0var email: String = ""var phones: MutableList<PhoneNumber> = mutableListOf()constructor(name: String, id: Int, email: String, phones: MutableList<PhoneNumber>) {this.name = namethis.id = idthis.email = emailthis.phones = phones} }class AddressBook{var persons: MutableList<Person> = mutableListOf() }



三、fastjson 序列化與反序列化



使用 fastjson 進行序列化與反序列化 :

// 初始化 kim.hsl.protobuf.AddressBook 對象var addressBook: AddressBook = AddressBook()addressBook.persons = mutableListOf(Person("Tom", 0, "", mutableListOf(PhoneNumber("666", PhoneNumber.PhoneType.MOBILE))),Person("Jerry", 1, "", mutableListOf(PhoneNumber("888", PhoneNumber.PhoneType.MOBILE))))// 測試 fastjsonvar fastjsonStart = System.currentTimeMillis()// fastjson 序列化 : 將 addressBook 轉為 json 字符串var jsonString: String = JSON.toJSONString(addressBook)// 將字符串轉為 Byte 數組var bytes = jsonString.toByteArray()Log.i(MainActivity.TAG, "fastjson 序列化耗時 ${System.currentTimeMillis() - fastjsonStart} ms , " +"序列化大小 ${bytes.size} 字節")fastjsonStart = System.currentTimeMillis()// 序列化操作JSON.parseObject(String(bytes), com.example.tutorial.protos.AddressBook::class.java)Log.i(MainActivity.TAG, "fastjson 反序列化耗時 ${System.currentTimeMillis() - fastjsonStart} ms")

執行結果 :

2021-04-27 22:51:02.539 16698-16698/kim.hsl.protobuf I/MainActivity: fastjson 序列化耗時 21 ms , 序列化大小 169 字節 2021-04-27 22:51:02.568 16698-16698/kim.hsl.protobuf I/MainActivity: fastjson 反序列化耗時 29 ms



四、gson 序列化與反序列化



使用 gson 進行序列化與反序列化 :

// 初始化 kim.hsl.protobuf.AddressBook 對象var addressBook: AddressBook = AddressBook()addressBook.persons = mutableListOf(Person("Tom", 0, "", mutableListOf(PhoneNumber("666", PhoneNumber.PhoneType.MOBILE))),Person("Jerry", 1, "", mutableListOf(PhoneNumber("888", PhoneNumber.PhoneType.MOBILE))))// 測試 gsonvar gsonStart = System.currentTimeMillis()// gson 序列化 : 將 addressBook 轉為 json 字符串jsonString = Gson().toJson(addressBook)// 將字符串轉為 Byte 數組bytes = jsonString.toByteArray()Log.i(MainActivity.TAG, "gson 序列化耗時 ${System.currentTimeMillis() - gsonStart} ms , " +"序列化大小 ${bytes.size} 字節")gsonStart = System.currentTimeMillis()Gson().fromJson(String(bytes), com.example.tutorial.protos.AddressBook::class.java)Log.i(MainActivity.TAG, "gson 反序列化耗時 ${System.currentTimeMillis() - gsonStart} ms")

執行結果 :

2021-04-27 22:51:02.597 16698-16698/kim.hsl.protobuf I/MainActivity: gson 序列化耗時 29 ms , 序列化大小 169 字節 2021-04-27 22:51:02.609 16698-16698/kim.hsl.protobuf I/MainActivity: gson 反序列化耗時 12 ms



五、完整代碼





1、主界面代碼


package kim.hsl.protobufimport androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import com.alibaba.fastjson.JSON import com.example.tutorial.protos.AddressBook import com.example.tutorial.protos.Person import com.google.gson.Gsonclass MainActivity : AppCompatActivity() {companion object{val TAG = "MainActivity"}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 測試 Protobuf 性能protobufTest()// 測試 Json 性能JsonTest().jsonTest()}fun protobufTest(){// 創建 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() - deserializeStart} ms")}}

2、JSON 測試代碼


package kim.hsl.protobufimport android.util.Log import com.alibaba.fastjson.JSON import com.google.gson.Gsonclass JsonTest {fun jsonTest(){// json 測試// 初始化 kim.hsl.protobuf.AddressBook 對象var addressBook: AddressBook = AddressBook()addressBook.persons = mutableListOf(Person("Tom", 0, "", mutableListOf(PhoneNumber("666", PhoneNumber.PhoneType.MOBILE))),Person("Jerry", 1, "", mutableListOf(PhoneNumber("888", PhoneNumber.PhoneType.MOBILE))))// 測試 fastjsonvar fastjsonStart = System.currentTimeMillis()// fastjson 序列化 : 將 addressBook 轉為 json 字符串var jsonString: String = JSON.toJSONString(addressBook)// 將字符串轉為 Byte 數組var bytes = jsonString.toByteArray()Log.i(MainActivity.TAG, "fastjson 序列化耗時 ${System.currentTimeMillis() - fastjsonStart} ms , " +"序列化大小 ${bytes.size} 字節")fastjsonStart = System.currentTimeMillis()// 序列化操作JSON.parseObject(String(bytes), com.example.tutorial.protos.AddressBook::class.java)Log.i(MainActivity.TAG, "fastjson 反序列化耗時 ${System.currentTimeMillis() - fastjsonStart} ms")// 測試 gsonvar gsonStart = System.currentTimeMillis()// gson 序列化 : 將 addressBook 轉為 json 字符串jsonString = Gson().toJson(addressBook)// 將字符串轉為 Byte 數組bytes = jsonString.toByteArray()Log.i(MainActivity.TAG, "gson 序列化耗時 ${System.currentTimeMillis() - gsonStart} ms , " +"序列化大小 ${bytes.size} 字節")gsonStart = System.currentTimeMillis()Gson().fromJson(String(bytes), com.example.tutorial.protos.AddressBook::class.java)Log.i(MainActivity.TAG, "gson 反序列化耗時 ${System.currentTimeMillis() - gsonStart} ms")}}class PhoneNumber{enum class PhoneType{MOBILE,HOME,WORK;}var number: String = ""var type: PhoneType = PhoneType.MOBILEconstructor(number: String, type: PhoneType) {this.number = numberthis.type = type} }class Person{lateinit var name: Stringvar id: Int = 0var email: String = ""var phones: MutableList<PhoneNumber> = mutableListOf()constructor(name: String, id: Int, email: String, phones: MutableList<PhoneNumber>) {this.name = namethis.id = idthis.email = emailthis.phones = phones} }class AddressBook{var persons: MutableList<Person> = mutableListOf() }

3、執行結果


執行結果 :

2021-04-27 22:51:02.513 16698-16698/kim.hsl.protobuf I/MainActivity: 序列化耗時 4 ms , 序列化大小 34 字節 2021-04-27 22:51:02.515 16698-16698/kim.hsl.protobuf I/MainActivity: 反序列化耗時 2 ms2021-04-27 22:51:02.539 16698-16698/kim.hsl.protobuf I/MainActivity: fastjson 序列化耗時 21 ms , 序列化大小 169 字節 2021-04-27 22:51:02.568 16698-16698/kim.hsl.protobuf I/MainActivity: fastjson 反序列化耗時 29 ms2021-04-27 22:51:02.597 16698-16698/kim.hsl.protobuf I/MainActivity: gson 序列化耗時 29 ms , 序列化大小 169 字節 2021-04-27 22:51:02.609 16698-16698/kim.hsl.protobuf I/MainActivity: gson 反序列化耗時 12 ms



六、參考資料



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 性能测试 ( fastjson 序列化与反序列化 | gson 序列化与反序列化 | 三种序列化与反序列化性能对比 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久高清无码电影 | www.爱爱.com| 国产精品无码AV | 久久久久国产一区二区三区 | 国产一区久久 | 人妻少妇精品中文字幕av蜜桃 | 国产精品无码专区av在线播放 | 九色porn蝌蚪 | 特级黄色大片 | 无码国产69精品久久久久同性 | 亚洲精品小视频在线观看 | 私人网站| 大战熟女丰满人妻av | 亚洲熟女乱色一区二区三区 | 少妇无码av无码专区在线观看 | 非洲黑寡妇性猛交视频 | 亚洲爱爱网| 手机在线小视频 | 日本不卡影院 | 哪个网站可以看毛片 | 五月天六月色 | 五月天婷婷在线视频 | 欧美在线精品一区二区三区 | 国产无遮挡又黄又爽又色视频 | 91精品一区二区三区综合在线爱 | 黄色av地址| 国产污视频网站 | 国产精品第五页 | 久久久久网站 | 久久精品国产99国产精品 | 无码人妻丰满熟妇啪啪欧美 | 午夜影院在线视频 | 色多多视频在线 | 一级片成人 | 综合另类 | 少妇2做爰hd韩国电影 | 橹图极品美女无圣光 | 亚洲一区二区三区免费观看 | 97超碰超碰 | 黄频网站在线观看 | av成人在线看 | 日韩亚洲欧美一区二区三区 | 爱豆国产剧免费观看大全剧集 | 色姐| 国产精品va无码一区二区 | 永久免费毛片 | 亚洲第一福利网站 | 成人久久久久久久 | 99综合 | 中文字幕视频在线播放 | 国产裸体美女永久免费无遮挡 | 丝袜ol美脚秘书在线播放 | 美国一级大黄一片免费中文 | 亚洲偷拍一区 | 日韩女优在线 | 国产ts在线视频 | 日韩网站免费观看高清 | 成人av免费在线看 | 日本猛少妇色xxxxx猛叫 | 天堂网www在线| 亚洲天堂五码 | 手机看片一区 | 国产区免费观看 | 日本美女一区 | 国产在线一级 | 无码成人精品区一级毛片 | 亚洲一区成人在线 | 深田咏美中文字幕 | 韩国三级av | 日韩午夜网站 | 欧美一区二区三区久久 | 在线欧美成人 | a天堂在线 | 四虎精品欧美一区二区免费 | 日韩一区二区视频在线播放 | 国产在线观看99 | 亚洲欧美小视频 | 91视频精选 | 九九看片 | 欧洲亚洲一区二区三区 | 亚洲成人av免费观看 | 91精品日韩| 欧美在线va | caoporn人人| 顶级尤物极品女神福利视频 | 西西4444www大胆无码 | 在线观看亚洲精品 | 国产婷婷一区二区 | 四虎影院在线免费播放 | bt天堂av | 山村大伦淫第1部分阅读小说 | 精品视频在线免费看 | 尤物精品在线观看 | 综合激情五月婷婷 | 小柔的裸露日记h | 高清日韩一区 | 久久国产这里只有精品 | 性午夜 | 亚洲AV无码一区二区三区蜜桃 |