0
我正在接收数据为unsigned char*
,它包含一个字节数组。在协议缓冲区中使用Message :: ParseFromIstream感到困惑
unsigned char* byteptr = static_cast<unsigned char*>(msg.data());
我想我的初始化协议缓冲区是一个地址簿。我觉得最好的比赛是使用ParseFromIstream是以下几点:
my_address_book.ParseFromIstream()
关于字节数组,这是unsigned char*
。由于字节数组的长度不是在编译时已知,有两种选择:
选项1可变长度数组
unsigned char bytearray[msg.size()];
std::copy(byteptr, byteptr + msg.size(), bytearray);
选项2.动态分配的数组,并删除它进行一次
unsigned char* bytearray = new unsigned char [msg.size()];
std::copy(byteptr, byteptr + msg.size(), bytearray);
我有以下问题:
- 如何在情况下使用?
- 考虑到更好的性能(快速执行速度)是优先考虑的,哪个选项在上述两者中最好?
'Message'继承自'MessageLite',因此[您也可以使用'MessageLite'函数](https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.message_lite )。检查'ParseFromString',['ParseFromCodedStream','ParseFromZeroCopyStream'或'ParseFromBoundedZeroCopyStream'](https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.io.coded_stream)并使用最符合你情况的那个。 – Cornstalks