如何将google :: protobuf :: Message直接序列化到预分配的内存中?

时间:2018-08-09 02:28:16

标签: c++ protocol-buffers

如果我在ByteSizeLong对象上调用google::protobuf::Message,并且有一个char*到适当大小的预分配内存块(大于msg.ByteSizeLong()),有没有办法我可以直接将消息序列化到内存中而无需额外复制吗?

1 个答案:

答案 0 :(得分:1)

您可以这样做:

msg.SerializeToArray(buffer, bufferSize);

或者,前提是您确实确实致电过该邮件ByteSizeLong(),那么这样做会更快一点:

msg.SerializeWithCachedSizesToArray((unsigned char*)buffer);

第二种形式要求您确实调用了ByteSizeLong()(并且之后没有进行任何更改),因为这样做将为所有子对象存储缓存的大小。