C++ 在协议缓冲区中使用Message::ParseFromIstream时感到困惑

C++ 在协议缓冲区中使用Message::ParseFromIstream时感到困惑,c++,protocol-buffers,C++,Protocol Buffers,我以无符号字符*的形式接收数据,其中包含一个字节数组 unsigned char* byteptr = static_cast<unsigned char*>(msg.data()); 关于字节数组,即无符号字符*。由于字节数组的长度在编译时未知,因此有两个选项: 备选案文1。可变长度数组 unsigned char bytearray[msg.size()]; std::copy(byteptr, byteptr + msg.size(), bytearray); 备选案文2。

我以
无符号字符*
的形式接收数据,其中包含一个字节数组

unsigned char* byteptr = static_cast<unsigned char*>(msg.data());
关于字节数组,即
无符号字符*
。由于字节数组的长度在编译时未知,因此有两个选项:

备选案文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);
我有以下问题:

  • 如果是
    无符号字符*
    ,如何使用
    ParseFromIstream
  • 考虑到更好的性能(更快的执行速度)是优先考虑的,在这两个选项中,哪一个是最好的
  • 您应该使用,它接受指针和大小:

    my_address_book.ParseFromArray(msg.data(), msg.size())
    
    根本不需要将数据复制到新数组。

    您应该使用,它接受指针和大小:

    my_address_book.ParseFromArray(msg.data(), msg.size())
    

    根本不需要将数据复制到新数组。

    Message
    继承自
    MessageLite
    ,因此。选中
    ParseFromString
    ,并使用最符合您的情况的字符串。
    Message
    继承自
    MessageLite
    ,因此。检查ParseFromString,并使用最符合您情况的。我将尝试您的建议,并尽快告知结果。非常感谢。我会尝试你的建议,并尽快告诉你结果。非常感谢你。