如何解析超長的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();

發佈了22 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章