linux - protobuf 和 Serialized Array/String/Ostream 提供的其他目标类型

标签 linux serialization types protocol-buffers

我阅读了protobuf C++编程指南的教程,它的.h函数中似乎提供了SerializeWithCachedSizeToArray,我还可以调用SerializeToString()SerializeToOstream().

我想知道:

(1) pb是否为cpp代码提供其他默认的序列化/反序列化函数?

(2)如何使用生成的函数

void SerializeWithCachedSizes(
  ::google::protobuf::io::CodedOutputStream* output

我搜索了 google,但没有找到应该在何时何地使用 CodedOutputStream。

有什么解释吗?谢谢。

最佳答案

1) 序列化必须完成三个主要操作:a) 计算总大小、b) 编码和 c) 转储。例如,SerializeWithCachedSizeToArray 意味着 a) 使用缓存大小,以及 c) 转储到 char 数组。

根据执行这些操作的方式/地点,序列化函数有很多变体,您可以混合/匹配库提供的实用程序或您编写的实用程序来创建其他类型。如您所见,最常见的函数是“SerializeToString/Ostream”。例如,有字符串、字符数组、ostream、zlibstream 等。

2) CodedOutputStream 是一个用于对标记流进行编码的实用程序类。标签 - 在“=”之后放入原型(prototype)中的数字。你用转储目标实例化它,例如流、字符数组等...

关于linux - protobuf 和 Serialized Array/String/Ostream 提供的其他目标类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41604011/

相关文章:

linux - 不同子系统驱动程序之间的通信(例如 : IIO and Charging driver)

php - 我能否从 Linux 服务器上的 PHP 应用程序可靠地创建 Excel 文档?

.net - 如何在 Asp.Net Web api 中返回深度序列化对象(具有复杂类型属性)?

string - Error::description 被软弃用是否意味着我必须重写我当前的错误消息系统?

c++ - 类型信息/类型标识输出

c++ - 从/dev/ttyACM0 读取时 CPU 负载高

c# - 什么时候应该在 .NET 框架中使用 XML 序列化与二进制序列化?

c# - IList<T> 的数据协定序列化

arrays - 在 Typescript 中重写 Array.of() 以扩展 Array 的自定义二维数组类

linux - 不可预测的警报忽略信号