如何访问 Cap'n'Proto 的序列化数据?
How to access serialized data of Cap'n'Proto?
我正在与 Cap'n'Proto 合作,我的理解是没有必要进行序列化,因为它已经完成了。所以我的问题是,我如何访问序列化数据并获取它的大小,以便我可以将它作为字节数组传递给另一个库。
// person.capnp
struct Person {
name @0 :Text;
age @1 :Int16;
}
// ...
::capnp::MallocMessageBuilder message;
Person::Builder person = message.initRoot<Person>();
person.setName("me");
person.setAge(20);
// at this point, how do I get some sort of handle to
// the serialized data of 'person' as well as it's size?
我看到了 writePackedMessageToFd(fd, message);
调用,但不太明白传递的是什么,也找不到任何关于它的 API 文档。我也没有尝试写入文件描述符,因为我需要以 const void*
.
形式返回的序列化数据
在 Capnproto 的 message.h 文件中查找这个函数,它位于 MallocMessageBuilder 的基础 class 中,它表示它获取构成消息的原始数据。
kj::ArrayPtr<const kj::ArrayPtr<const word>> getSegmentsForOutput();
// Get the raw data that makes up the message.
但即便如此,我也不确定如何获取它,因为 const void*
。
想法?
::capnp::MallocMessageBuilder message;
是你的二进制信息,它的大小是
message.sizeInWords()
(以字节为单位的大小除以 8)。
这似乎是所需要的。
// ...
::capnp::MallocMessageBuilder message;
Person::Builder person = message.initRoot<Person>();
person.setName("me");
person.setAge(20);
kj::Array<capnp::word> dataArr = capnp::messageToFlatArray(message);
kj::ArrayPtr<kj::byte> bytes = dataArr.asBytes();
std::string data(bytes.begin(), bytes.end());
const void* dataPtr = data.c_str();
此时,我有一个 const void* dataPtr
和大小使用 data.size()
。
我正在与 Cap'n'Proto 合作,我的理解是没有必要进行序列化,因为它已经完成了。所以我的问题是,我如何访问序列化数据并获取它的大小,以便我可以将它作为字节数组传递给另一个库。
// person.capnp
struct Person {
name @0 :Text;
age @1 :Int16;
}
// ...
::capnp::MallocMessageBuilder message;
Person::Builder person = message.initRoot<Person>();
person.setName("me");
person.setAge(20);
// at this point, how do I get some sort of handle to
// the serialized data of 'person' as well as it's size?
我看到了 writePackedMessageToFd(fd, message);
调用,但不太明白传递的是什么,也找不到任何关于它的 API 文档。我也没有尝试写入文件描述符,因为我需要以 const void*
.
在 Capnproto 的 message.h 文件中查找这个函数,它位于 MallocMessageBuilder 的基础 class 中,它表示它获取构成消息的原始数据。
kj::ArrayPtr<const kj::ArrayPtr<const word>> getSegmentsForOutput();
// Get the raw data that makes up the message.
但即便如此,我也不确定如何获取它,因为 const void*
。
想法?
::capnp::MallocMessageBuilder message;
是你的二进制信息,它的大小是
message.sizeInWords()
(以字节为单位的大小除以 8)。
这似乎是所需要的。
// ...
::capnp::MallocMessageBuilder message;
Person::Builder person = message.initRoot<Person>();
person.setName("me");
person.setAge(20);
kj::Array<capnp::word> dataArr = capnp::messageToFlatArray(message);
kj::ArrayPtr<kj::byte> bytes = dataArr.asBytes();
std::string data(bytes.begin(), bytes.end());
const void* dataPtr = data.c_str();
此时,我有一个 const void* dataPtr
和大小使用 data.size()
。