首页 > 解决方案 > 如何将 google::protobuf::Message 直接序列化到预分配的内存中?

问题描述

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

标签: c++protocol-buffers

解决方案


你可以做:

msg.SerializeToArray(buffer, bufferSize);

或者,如果您确实确实调用ByteSizeLong()了该消息,那么这会更快一点:

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

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


推荐阅读