protobuf SerializeToArray 的合理用法列子
时间: 2023-10-08 07:13:01 浏览: 377
当使用 Google Protocol Buffers 作为数据格式时,我们通常使用 SerializeToArray 函数将对象序列化为二进制数据流。这个函数的常见用途是将数据持久化到磁盘或通过网络传输。
下面是一个示例代码,展示了如何使用 SerializeToArray 函数将一个自定义的 message(例如 Person)对象序列化为二进制数据流:
```cpp
#include "person.pb.h"
void demo() {
// 创建一个新的 Person 对象
Person person;
person.set_name("John Doe");
person.set_age(30);
person.add_phone_number("123-456-7890");
person.add_phone_number("987-654-3210");
// 将 Person 对象序列化为二进制数据流
const int SIZE = person.ByteSizeLong();
std::vector<unsigned char> buffer(SIZE);
person.SerializeToArray(&buffer[0], SIZE);
}
```
在上面的示例代码中,我们首先创建了一个新的 Person 对象,并使用 set_name、set_age 和 add_phone_number 方法设置了该对象的属性值。接着,我们调用 ByteSizeLong 函数计算了序列化后的数据流大小,分配了一个大小合适的缓冲区(std::vector),并将该对象序列化到缓冲区中。最后,我们得到了一个包含 Person 对象二进制表示的 vector。
需要注意的是,SerializeToArray 函数的第一个参数是指向缓冲区的指针,该缓冲区应具有足够的空间来存储序列化后的数据流。第二个参数是缓冲区的大小(以字节为单位)。当函数执行成功时,序列化后的数据将被写入缓冲区中,函数返回 true;否则返回 false。
这就是 protobuf SerializeToArray 函数的一个合理用例示例。
阅读全文