c++ - 如何将 google::protobuf::Message 直接序列化到预分配的内存中?
问题描述
如果我调用ByteSizeLong
一个google::protobuf::Message
对象并且我有char*
一个适当大小的预分配内存块(大于msg.ByteSizeLong()
),有没有办法可以将消息直接序列化到内存中而无需额外复制?
解决方案
你可以做:
msg.SerializeToArray(buffer, bufferSize);
或者,如果您确实确实调用ByteSizeLong()
了该消息,那么这会更快一点:
msg.SerializeWithCachedSizesToArray((unsigned char*)buffer);
第二种形式要求您确实调用ByteSizeLong()
(并且之后没有更改任何内容),因为这样做将存储所有子对象的缓存大小。
推荐阅读
- javascript - 当输出应为 HTML 时,在 javascript 函数中使用刀片
- r - 反应功能不起作用
- javascript - 无法读取leaflet.js 中未定义的属性“1”
- r - R中具有p值的相关矩阵
- instagram - 如何检索您关注的所有关注者的列表,而不是关注者?
- javascript - 试图检测滚动条是否在底部,但是这段代码有什么问题?
- python - 从 numpy 矩阵中提取某些索引
- php - file_get_contents 无法从正确的 url 检索 html
- jquery - 脚本在以下情况下不加载
- php - 在 ajax 添加到购物车时显示一个甜蜜的警报,以获取特定的 Woocommerce 购物车项目计数