C++ 网络序列化

标签 c++ serialization protocol-buffers boost-serialization ace

<分区>

我正在寻找将 C++ 数据包序列化为网络流的解决方案。

我在这里看到很多帖子都提到了:

  1. 高手

  2. Google Protocol Buffer

  3. 提升::序列化

  4. Qt::QDataStream

我的要求/约束​​:

  1. 解决方案必须不知道 LitteEndian/BigEndian。机器架构 x86/x64 和平台无关。

  2. 前 3 个解决方案的占用空间(RAM 和 ROM)对我的平台来说太大,第四个与下一个要求冲突。

  3. 该解决方案不需要大量样板代码(将有 200 多个数据包需要序列化)。

谢谢, 科比梅尔

最佳答案

如果您发现 Google Protocol Buffers 太重(我同意这一点,因为编译后的库可能需要超过 1 MB),您可以尝试 lite version protobuf 的大小要小几倍。 可以通过插入以下行在 *.proto 文件中启用它

option optimize_for = LITE_RUNTIME;

但是如果你需要一个开销最小的 protobuf 解决方案,我会选择 protobuf-c ,
protobuf 的 C 实现。 使用起来会有点困难,但二进制代码大小开销应该是最小的 (30-50 KB)。我知道这个 C 实现例如被 umurmur 使用- 在嵌入式 Linux ARM 和 MIPS 路由器上运行良好的语音服务器。

关于C++ 网络序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5623791/

相关文章:

C# 序列化不序列化数据类型日期时间,仅序列化字符串

c++ - 暂停程序直到 ofstream::flush() 完成

c++ - 我可以获取在重载的新运算符中使用新运算符的对象类型吗?

php - 如何以数组形式将数据存储在数据库中

python - 从部分 google protobuf 消息中检索信息

java - 无法反序列化压缩的 Protocol Buffer

machine-learning - Inception5h 与 Inception V4,什么是 5h

c++ - 将终端上的所有消息和警告打印到文件中?

c++ - 使用 "if"或 "switch"设置变量类型

c# - 反序列化每个字符串元素的 XML 元素列表