15 | 序列化:简单通用的数据交换格式有哪些?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了序列化和反序列化的概念,以及在C++中使用的三种数据交换格式:JSON、MessagePack和ProtoBuffer。作者详细解释了这些格式的特点和在C++中的应用,重点推荐了JSON for Modern C++作为JSON解析工具,并提供了使用示例。文章还包括了这些格式的序列化和反序列化操作、异常处理和高级用法。此外,还介绍了MessagePack和ProtoBuffer的特点和使用方法,包括它们的优缺点以及在实际应用中的注意事项。总的来说,本文全面介绍了这三种数据交换格式的特点和用法,为读者提供了选择合适数据格式的参考依据。读者可以通过本文快速了解序列化和反序列化的概念,以及在C++中使用JSON、MessagePack和ProtoBuffer进行数据交换的方法和工具。
《罗剑锋的 C++ 实战笔记》,新⼈⾸单¥59
全部留言(28)
- 最新
- 精选
- 被讨厌的勇气直接memcpy,同一种语言不同机器,或者不同语言可能存在兼容问题(变量内存存储布局、编码可能不同),而Json是一种标准,由Json库处理编码问题(比如大小端),且不同语言间统一,对头不?
作者回复: 说的很对。
2020-06-0934 - 蓝配鸡序列化/反序列化命名就用 “脱水/浸泡”, 会不会被打死- -
作者回复: 我觉得可以小范围推广一下,以后没准会流行起来,笑。
2020-06-1212 - java2c++问题2:和redis交互一般使用json,主要原因是可读性强,有问题时直接登录到redis控制台可以查看json内容,不过序列化需要的时间成本空间成本都是最高,如果追求性能就需要选择其他的了。 现在一些网络框架(rpc框架)都支持多种序列化的方式了,msgpack,thift跨语言支持的比较好,性能也不错我工作中相对用的多一些
作者回复: 很好的经验分享,json主要是对人友好,用来做人机接口很合适。
2020-06-1011 - 风json不存在大小端,字节序的问题吧,反正就是一个字符串。messagepack这种二进制格式的东西,才要考虑大小端。
作者回复: 对,json是字符串的文本形式,数字也表示成了文本,不需要考虑大小端问题。
2020-06-257 - hypb有2G内存限制问题,如果对象过大会不行
作者回复: pb好像确实有限制,我记得好像是64mb还是512mb,不是很确定。 这也是很合理的考虑,如果有超大对象,是不是要反思一下设计的问题,为什么会有这么大的对象,能否优化。
2020-06-117 - Why not.jsoncpp 也挺好用的 不知道老师怎么看
作者回复: jsoncpp比较老了,不是那么“现代”,但用起来也还可以。
2020-06-253 - do it1、为什么要有序列化和反序列化,直接 memcpy 内存数据行不行呢? 字节序问题;序列号反序列化可数据压缩(不确定😁) 2、你最常用的是哪种数据格式?它有什么优缺点? 工作中使用json多一点,有时使用pb。 pb:压缩效率算优点吧。改变结构需重新生成proto文件、proto怎么难阅读算不足之处
作者回复: 说的挺好,常用的序列化也就是这几种了
2020-06-123 - java2c++问题1:针对跨服务间的调用,涉及到网络传输,需要使用到字节流进行传输,序列化就是发送方将数据对象转化成字节流的过程,反序列就是接收方将字节流转化成数据对象的逆过程
作者回复: 这是序列化和反序列化的目的,但还没有说到根本上,如果单纯的memcpy,也是可以转换成字节流的。 可以参考其他同学的留言。
2020-06-103 - EncodedStar序列化和反序列化 可以按用户自定义的方式去读取吧,底层应该也是用类似memcpy这样的操作去处理里,只不过是又封装了一次统一接口方便我们使用,老师,我可以这么理解吗?? 常用json 和 pb ,感觉就是json对C++不是很友好,很多时候有\转义符困扰,pb就是每次比较麻烦,改了协议之后还的生成一下对应文件
作者回复: 1.序列化不是简单的memcpy,有点类似按照特定的规则去编码解码,屏蔽了硬件体系架构、语言的差异,是一种通用的格式。 2.json我觉得还行吧,用转义符那是没办法,C的老问题了。pb确实操作起来很麻烦,累。
2020-06-093 - 于小咸除了兼容不同语言外,序列化还有一个重要的作用是数据保存和网络传输,我们很难保证不同平台上内存里存的数据是一样的。 此外,对于包含指针的数据结构,我们是没法简单的memcpy,这会带来浅拷贝类似的问题。
作者回复: 说的非常好。
2021-09-152