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