如果我在ByteSizeLong
对象上调用google::protobuf::Message
,并且有一个char*
到适当大小的预分配内存块(大于msg.ByteSizeLong()
),有没有办法我可以直接将消息序列化到内存中而无需额外复制吗?
答案 0 :(得分:1)
您可以这样做:
msg.SerializeToArray(buffer, bufferSize);
或者,前提是您确实确实致电过该邮件ByteSizeLong()
,那么这样做会更快一点:
msg.SerializeWithCachedSizesToArray((unsigned char*)buffer);
第二种形式要求您确实调用了ByteSizeLong()
(并且之后没有进行任何更改),因为这样做将为所有子对象存储缓存的大小。