• 注册
  • Android博客 Android博客 关注:0 内容:1370

    Protobuf 和 JSON对比分析

  • 查看作者
  • 打赏作者
  • 当前位置: 职业司 > Android开发 > Android博客 > 正文
    • Android博客
    • Protocol Buffers (a.k.a., protobuf)
      are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.

      Protobuf是Google公司开发的一种语言中立 平台中立 可扩展 的 对结构化数据 序列化的机制。

      本文主要对Protobuf和JSON序列化&反序列化的性能做横向对比分析。
      JSON序列化使用Google官方的Gson框架。

      Protobuf Gson Language Platform
      3.17.3 2.8.7 Kotlin macOS IntelliJ IDEA

      测试序列化内容,高效作业25分钟的训练数据(mock)

      数据结构

      syntax = "proto3";
      package me.sunnyxibei.data;
      option java_package = "me.sunnyxibei.data";
      option java_outer_classname = "TaskProto";
      message  Eeg{
      repeated double  alphaData = 1;
      repeated double  betaData = 2;
      repeated double  attentionData = 3;
      repeated int64  timestampData = 4;
      int64  startTimestamp = 5;
      int64  endTimestamp = 6;
      }
      message TaskRecord{
      string localId = 1;
      int64  localCreated = 2;
      int64  localUpdated = 3;
      int32 score = 4;
      int64  originDuration = 5;
      string  subject = 6;
      string  content = 7;
      Eeg eeg = 8;
      }
      复制代码

      对比结果
      repeat = 1

      Gson序列化大小 = 30518 bytes
      Gson序列化时间 = 113 ms
      protobuf序列化大小 = 13590 bytes
      protobuf序列化时间 = 39 ms
      *************************
      Gson反序列化时间 = 15 ms
      protobuf反序列化时间 = 3 ms
      复制代码

      repeat = 10

      Gson序列化时间 = 137 ms
      protobuf序列化时间 = 41 ms
      *************************
      Gson反序列化时间 = 50 ms
      protobuf反序列化时间 = 5 ms
      复制代码

      repeat = 100

      Gson序列化时间 = 347 ms
      protobuf序列化时间 = 47 ms
      *************************
      Gson反序列化时间 = 212 ms
      protobuf反序列化时间 = 22 ms
      复制代码

      repeat = 1000

      Gson序列化时间 = 984 ms
      protobuf序列化时间 = 97 ms
      *************************
      Gson反序列化时间 = 817 ms
      protobuf反序列化时间 = 105 ms
      复制代码

      repeat = 10000

      Gson序列化时间 = 7034 ms
      protobuf序列化时间 = 225 ms
      *************************
      Gson反序列化时间 = 5544 ms
      protobuf反序列化时间 = 300 ms
      复制代码

      repeat = 100000

      Gson序列化时间 = 65560 ms
      protobuf序列化时间 = 1469 ms
      *************************
      Gson反序列化时间 = 49984 ms
      protobuf反序列化时间 = 2409 ms
      复制代码

      结论:

      1. 空间对比,Protobuf序列化后的数据大小,为JSON序列化后的44.5%
      2. 时间对比
      次数 序列化(Protobuf/JSON) 反序列化(Protobuf/JSON)
      1 34.5% 20%
      10 29.9% 10%
      100 13.5% 9.43%
      1000 9.9% 12.9%
      10000 3.2% 5.41%
      100000 2.24% 4.82%

      请登录之后再进行评论

      登录

      手机阅读天地(APP)

      • 微信公众号
      • 微信小程序
      • 安卓APP
      手机浏览,惊喜多多
      匿名树洞,说我想说!
      问答悬赏,VIP可见!
      密码可见,回复可见!
      即时聊天、群聊互动!
      宠物孵化,赠送礼物!
      动态像框,专属头衔!
      挑战/抽奖,金币送不停!
      赶紧体会下,不会让你失望!
    • 实时动态
    • 签到
    • 做任务
    • 发表内容
    • 偏好设置
    • 到底部
    • 帖子间隔 侧栏位置:
    • 还没有账号?点这里立即注册