当前位置: 首页 > 知识库问答 >
问题:

分析Protobuf与JSON并遇到数据大小问题

薛栋
2023-03-14

在Java,我的任务是查看JSON格式与Protobuf格式相同的数据的数据大小和处理速度(创建数据的速度)。

对于JSON,我使用了jackson,创建了一个subscriptions类,其中包含一个list map字段,称为subscriptionlist。每个hashmap将对应于一个订阅。我从一个文件中读取,每一行都是“”字段分隔的,有523个字段。我遍历每个字段,为键指定订阅hashmap列名,为值指定列值。我遍历每一行以创建所有1000个订阅,将它们放入arraylist ,然后创建subscriptions,并将subscriptionList设置为具有1000个订阅的arraylist。最后,我将subscriptions对象转换为JSON格式的字符串,并将其写入文本文件,测量文本文件的大小,这就是我测量数据大小的方法。

对于protobuf,.proto文件类似于,

message Subscriptions {
    repeated Subscription subscription = 1;
}
message Subscription {
    map<string, string> attr = 1;
}

我再次遍历每一行和每列,创建1000条订阅消息,然后重复地将订阅消息添加到订阅消息中。然后我使用.getSerializedSize方法,这就是我测量protobuf消息数据大小的方法。

目前,我看到这两种格式给我的数据大小基本相同,我不明白为什么。ProtBuf消息已经在本质上被压缩了一些,而且它们对空间的要求比原始JSON要低。我不知道我做错了什么,我没有想法去尝试。

共有1个答案

李建中
2023-03-14

将映射转换到JSON对象和将同一映射转换到protobuf消息之间不会有太大区别。例如,在protobuf中,对象键周围没有引号,第一级消息周围也没有大括号,但这并没有多大区别,特别是在大型数据集中。

在使用打包重复字段(仅为基元类型)时,您将看到protobuf中的一些差异,因为这些字段被转换为二进制值,因此与JSON中的UTF8编码相比,其大小大大减小。

 类似资料:
  • 本文向大家介绍ajax请求data遇到的问题分析,包括了ajax请求data遇到的问题分析的使用技巧和注意事项,需要的朋友参考一下 使用jquery,post请求data:那里要使用data:JSON.stringify(data) 原因:事实上,假如不用JSON.stringify(data), 会变成字符串拼接,'name=vinxent&age=21',有点和get方法相像。若使用JSON.

  • 问题内容: 在HighChart中,我需要针对x和y轴绘制一系列数据。HighChart希望数据为json格式。即[[x,y],[x,y]……[x,y]]。其中x和y是时间(1392345000-Unix纪元格式)和值(49.322)。因此,我正在进行ajax调用以获取数据,并成功将json返回的数据渲染为highchart。在大多数情况下,即,如果data([x,y])的计数低于87500行,则

  • SuperMap iClient for Leaflet 对接了 SuperMap iServer 的分布式分析服务,为用户提供大数据分析功能,主要包括: 密度分析 点聚合分析 单对象空间查询分析 区域汇总分析 矢量裁剪分析

  • 本文向大家介绍DWZ+ThinkPHP开发时遇到的问题分析,包括了DWZ+ThinkPHP开发时遇到的问题分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了DWZ+ThinkPHP开发时遇到的问题。分享给大家供大家参考,具体如下: 目前我用的 thinkphp 版本是  3.1.3 J-UI  dwz 版本好像是 1.4 当我在项目开发的过程中 遇到了这么的一个问题, 当我我在后台执行a

  • 本文向大家介绍IOS json 解析遇到错误问题解决办法,包括了IOS json 解析遇到错误问题解决办法的使用技巧和注意事项,需要的朋友参考一下 概要: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn't be completed. (Cocoa error 3840.)" (Unescaped control ch

  • 本文向大家介绍面试中遇到的java逃逸分析问题,包括了面试中遇到的java逃逸分析问题的使用技巧和注意事项,需要的朋友参考一下 前言 记得几年前有一次栈长去面试,问到了这么一个问题: Java中的对象都是在堆中分配吗?说明为什么! 当时我被问得一脸蒙逼,瞬间被秒杀得体无完肤,当时我压根就不知道他在考什么知识点,难道对象不是在堆中分配吗?最后就没然后了,回去等通知了。。 下面我收集了一下网友的回答。