首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【附近的人】序列化之白送篇---msgpack大战protobuf

protobuf json 第一个和第四个就不说了昂,然后是各种语言内置的序列化与反序列化函数也不说了昂。...---- msgpack 这玩意的官网是https://msgpack.org/,打开你应该能发现一大坨各种各样包括你没见过的语言对msgpack的实现,比如Golang比如PHP比如C,下面看下PHP...先说PHP的,PHP对msgpack的实现最好用鸟哥实现的那个msgpack扩展,使用起来非常非常非常粗暴简单,并同时与JSON简单对比一下,你们感受下: <?...---- protobuf 相对msgpack而言,protobuf可能稍微麻烦些,protobuf有一个类似于thrift idl的流程,就是需要先定义好数据结构,对于广大php而言,这么做似乎又有一个好处...测试用的golang demo代码如下: package mainimport ("fmt""protopack""github.com/golang/protobuf/proto")func main

4.4K30

protobuf、flatbuffer、msgpack 针对小数据包的简单对比

其他的协议打解包库也没有特别好用的,如果不是 header only 我还不如去用 protobuf 。 不过之前使用 msgpack 的小对象分配比较暴力,依赖于 malloc 实现的优化。...msgpack 会对整数类型有一个字节记录长度,后面才是实际整数,有一定的压缩效果。这里看起来这个长度还是比较理想的。...\000(\001 protobuf 会对整数类型使用varint来压缩空数据来减少长度。效果也比较好,打包后数据块只占用了57字节。...protobuf 的内存占用比较多一些,达到了 376。protobuf 的arena默认配置是初始预分配块256字节,然后每次*2,一直到8K为止。sample里是分配了两个块一共768字节。...msgpack 是59字节,减去数据内容的13字节后是46字节。protobuf 是57字节,减去数据内容的13字节后是44字节。这个差距就比较大了。

6.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

msgpack分析

\n"; echo 'MessagePack_str:'.strlen(msgpack_pack($str))."...\n"; echo 'MessagePack_str:'.strlen(msgpack_pack($str))."\n"; ?...得一个字符一个字符地匹配过去吧,得判断是不是引号、括号之类的吧… 但是MessagePack 则简单多了,直接一遍遍历过去了,从前面的数据头,就可以知道后面的是什么数据,指针应该向后移动多少,比JSON的构建链表少了很多比较的过程...来计算个数据吧,把刚才的数组,encode、decode重复1000万次: msgpack_unpack(msgpack_pack($arr)); json_decode(json_encode($arr...当然,也有一种情况,我在mc中存json,然后直接出来就是页面可用的json,都不用解析json了(当然这个在实际开发中比较少见)。 2.存在可以持久化的Key-val存储中。

1.7K70

ProtoBuf试用与JSON的比较

依赖Java版本的ProtoBuf支持库这里只举一个用Gradle使用依赖的栗子implementation 'com.google.protobuf:protobuf-java:3.9.1'5....Message.Person.Phone phone : phoneList){ System.out.printf("手机号:%s (%s)\n", phone.getNumber(), phone.getType());}比较为了能体现...ProtoBuf的优势,我写了同样结构体的Java类,并且将Java对象转换成JSON数据,来与ProtoBuf进行比较。...JSON编译库使用Google提供的GSON库,JSON的部分代码就不贴出来了,直接展示结果比较结果结果运行 1 次【 JSON 开始编码 】JSON 编码1次,耗时:22msJSON 数据长度:106...:106-开始解码-JSON 解码100次,耗时:8ms【 ProtoBuf 开始编码 】ProtoBuf 编码100次,耗时:31msProtoBuf 数据长度:34-开始解码-ProtoBuf 解码

7.9K30

libatbus 的大幅优化

等几个构建流程比较恶心的库的自动化构建流程和工具脚本。...移除msgpack 之前使用msgpack是因为它宣称效率是protobuf的4倍。但是自从protobuf 3.0以后,可以使用Arena来减少碎片,我预估这个对性能的影响还挺明显的。...反倒是我之前对msgpack的时候也是暴力new/delete的。所以综合来说我觉得protobuf 3.0+更好一些。另外protobuf生成的接口和反射支持比msgpack方便太多了。...而msgpack代码里写死的异常处理,而protobuf只要开一个编译宏就能完全关闭异常。 新的替代品是 protobuf ,我用protobuf完全替换掉了原来msgpack提供的功能。...在切到protobuf之前,我还考虑过使用flatbuffer,写了个简单的对比,有兴趣的童鞋可以看看 《protobuf、flatbuffer、msgpack 针对小数据包的简单对比》 。

96320

【Android Protobuf 序列化】Protobuf 简介 ( Protobuf 项目简介 | Protobuf 优缺点分析 )

文章目录 一、Protobuf 简介 二、Protobuf 优缺点分析 1、Protobuf 优点 2、Protobuf 缺点 三、参考资料 一、Protobuf 简介 ---- Protobuf 是...使用场景 : 数据交换 : 从网络中下载数据 , 发送数据给服务器 ; 数据存储 : 获取或生成的数据 , 需要存储下来 ; Protobuf 语言特点 : Protobuf 包含一套 " 数据结构接口描述语言...://github.com/protocolbuffers/protobuf Protobuf 当前支持的编程语言 , 平台 ; 一套 Protobuf 源文件 , 可以编译出不同的语言的源代码 , 支持的语言类型如下...: 二、Protobuf 优缺点分析 ---- 1、Protobuf 优点 性能方面 : 体积小 : Protobuf 序列化后 , 体积小 , 序列化后 , 大约是 JSON / XML 等文本方式的...Protobuf 参考资料 : Protobuf 官网主页 : https://developers.google.com/protocol-buffers Protobuf 语法指南 : https

2.7K30

【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 使用文档 | 创建 Protobuf 源文件 | Protobuf 语法 )

文章目录 一、Protobuf 使用文档 二、创建 Protobuf 源文件 三、Protobuf 语法 四、参考资料 一、Protobuf 使用文档 ---- Protobuf Java 语言对应用法...: https://developers.google.com/protocol-buffers/docs/javatutorial 使用时 , 参考上述页面的文档说明 , 进行开发 ; 二、创建 Protobuf...语法 ---- 设置 protobuf 语法版本 : Protocol Buffers 有 proto2 和 proto3 两个版本 , 这两个版本之间的 语法 , 与 底层实现 都有一定的不同 ;...参考资料 : Protobuf 官网主页 : https://developers.google.com/protocol-buffers Protobuf 语法指南 : https://developers.google.com.../docs/javatutorial Protobuf 源码地址 : https://github.com/protocolbuffers/protobuf

98030

【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 源码分析 | 创建 Protobuf 对象 )

文章目录 一、Protobuf 源码分析 二、创建 Protobuf 对象 三、完整代码示例 四、参考资料 一、Protobuf 源码分析 ---- Protobuf 源文件如下 : addressbook.proto...序列化】Protobuf 使用 ( protobuf-gradle-plugin 插件简介 | Android Studio 中配置插件 | AS 中编译源文件 ) 中 , 使用了 Gradle 插件..., 自动将 Android Studio 工程中的 Protobuf 编译成了 Java 源码 , 现在开始使用生成的 Java 源码进行开发 ; 在 Protobuf 源码 addressbook.proto...Protobuf 源码地址 : https://github.com/protocolbuffers/protobuf Protobuf 发布版本下载地址 : https://github.com.../protocolbuffers/protobuf/releases protobuf-gradle-plugin 项目地址 : https://github.com/google/protobuf-gradle-plugin

69850

Msgpack有没有兴趣了解一下?

比json好用的数据其实有很多,例如上次我们提到过的protobuf,这是google提供的一个数据结构,能改很大程度上改善传送数据的大小和结构,默认读取的数据都会解析成字符串。...那我们为什么会选则使用msgpack呢? 首先引用msgpack官网用一句话总结: ?...如果说把json数据的大小比作西瓜大小,那么protobuf就是苹果大小,msgpack呢,则是红豆大小,所以msgpack使用优势还是很明显的!...想在python中使用msgpack,就需要安装msgpack模块,我们还是老样子,使用pip进行安装: pip install msgpack 安装完之后导入这个模块,就可以使用了。...import msgpack msgpack.packb([1, 2, 3], use_bin_type=True) '\x93\x01\x02\x03' msgpack.unpackb(_, raw=

2.3K30

ProtoBuf】1.初识ProtoBuf

通过Json、XML、ProtoBuf可以实现序列化。(本文讲的就是ProtoBuf) 二. ProtoBuf 1. 什么是ProtoBuf ProtoBuf概念:将结构化数据进行序列化的一种方式。...ProtoBuf的特点 简单来讲,ProtoBuf(全称为Protocol Buffer)是让结构数据序列化的⽅法。 一....本身特点: 语⾔⽆关、平台⽆关:即ProtoBuf⽀持Java、C++、Python等多种语⾔,⽀持多个平台。 ⾼效:即⽐XML和Json更⼩、更快、更为简单。...处理类的方法:序列化和反序列化(还有其他方法不一一列举) 对于开发者来说,定义属性字段比较简单;而另外两种方法的编写,都属于费力不讨好的活,比较耗时) 3....ProtoBuf进行序列化反序列化的流程 在ProtoBuf中,将类(class)称之为消息(message) 依赖通过编译生成的头文件和源文件实际上就是通过message XXX生成class XXX

17040

PHP序列化的四种实现办法与横向对比

比如在一个比较典型的服务架构中,网关服务器和内部RPC服务器之间通过msgpack传递数据。这都是典型的序列化为了传输的典型应用案例。...这里序列化的概念可能更为广泛和笼统一些,包括传统的serialize、json、msgpackprotobuf等。...实际上,从更高的层面看,数据的序列化可以分为两种: 文本序列化,常见如json、serialize、xml等 二进制序列化,常见如msgpackprotobuf、thrift等 一般说来,考验序列化技术的性能指标一共有两个...就目前来看,protobufmsgpack等二进制序列化无论是速度上还是数据大小上,都要比文本序列化更好。不过话说回来,文本序列化有更好的可读性,一眼就能瞪出来数据内容大概是啥玩意。...4、msgpack用法 msgpack_pack(),序列化办法。 msgpack_unpack(),反序列化办法。 测试代码如下: <?

77921

PHP序列化的四种实现方法与横向对比

比如在一个比较典型的服务架构中,网关服务器和内部RPC服务器之间通过msgpack传递数据。这都是典型的序列化为了传输的典型应用案例。...这里序列化的概念可能更为广泛和笼统一些,包括传统的serialize、json、msgpackprotobuf等。...实际上,从更高的层面看,数据的序列化可以分为两种: 文本序列化,常见如json、serialize、xml等 二进制序列化,常见如msgpackprotobuf、thrift等 一般说来,考验序列化技术的性能指标一共有两个...就目前来看,protobufmsgpack等二进制序列化无论是速度上还是数据大小上,都要比文本序列化更好。不过话说回来,文本序列化有更好的可读性,一眼就能瞪出来数据内容大概是啥玩意。...4、msgpack用法 msgpack_pack(),序列化方法。 msgpack_unpack(),反序列化方法。 测试代码如下: <?

95830

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

文章目录 一、Protobuf 序列化 二、Protobuf 反序列化 三、完整代码 四、参考资料 一、Protobuf 序列化 ---- 在上一篇博客 【Android Protobuf 序列化】Protobuf...使用 ( Protobuf 源码分析 | 创建 Protobuf 对象 ) 中 , 创建了 Protobuf 对象 , 本博客中将其序列化 , 保存到本地文件中 ; 序列化操作 : 调用 Protobuf...I/MainActivity: 序列化耗时 4 ms , 序列化大小 34 字节 二、Protobuf 反序列化 ---- 反序列化操作 : 调用 Protobuf 对象的 parseFrom 方法...Protobuf 语法指南 : https://developers.google.com/protocol-buffers/docs/proto Protobuf Java 语言对应用法.../protocol-buffers/docs/downloads Protobuf 源码地址 : https://github.com/protocolbuffers/protobuf Protobuf

67340

protobuf介绍

Protobuf介绍什么是ProtobufProtobuf,全称为Protocol Buffers,是Google开发的一种轻量级的数据交换格式。...Protobuf的特点简洁的结构定义语言Protobuf使用一种简洁的结构定义语言来定义数据结构和消息格式。这种语言具有类似于C语言的语法,使用起来非常直观和简单。...Protobuf使用二进制格式进行数据的序列化和反序列化,这种格式更加紧凑,占用的存储空间更小,传输速度更快。可扩展性和兼容性Protobuf支持数据结构的向前和向后兼容。...当需要读取数据时,可以使用Protobuf将二进制数据反序列化为学生和班级对象,方便进行数据操作和展示。 通过使用Protobuf,可以简化数据的存储和传输过程,提高系统的性能和可靠性。...通过使用Protobuf,开发人员可以更轻松地定义和处理复杂的数据结构,并在不同的平台和语言之间进行数据交换。虽然Protobuf在许多方面都有很多优点,但它也有一些缺点。

21900
领券