2

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

4

1 回答 1

1

你可以做:

msg.SerializeToArray(buffer, bufferSize);

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

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

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

于 2018-08-10T03:43:09.750 回答