如何解析超长的protobuf

转自:https://blog.csdn.net/li_yang98/article/details/5870817

在调用protobuf的ParseFromString(str)方法时,默认情况下,如果str的长度>64MB,会返回失败。

http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/reference/cpp/google.protobuf.io.coded_stream.html#CodedInputStream.SetTotalBytesLimit.details

这里给出了解释,主要是出于安全因素的考虑。

 

可以通过SetTotalBytesLimit方法去除这个限制:

// ::google::protobuf::Message req;

::google::protobuf::io::ArrayInputStream input(str.data(), str.size());
::google::protobuf::io::CodedInputStream decoder(&input);
decoder.SetTotalBytesLimit(1024*1024*1024, 64*1024*1024);
bool success = req.ParseFromCodedStream(&decoder) && decoder.ConsumedEntireMessage();

猜你喜欢

转载自blog.csdn.net/robotcat123/article/details/80583205
今日推荐