如何将google::p rotobuf::消息直接序列化到预分配的内存中?

How to serialize a google::protobuf::Message directly into preallocated memory?

本文关键字:预分配 序列化 内存 google 消息 rotobuf      更新时间:2023-10-16

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

你可以做:

msg.SerializeToArray(buffer, bufferSize);

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

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

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