我是新來的protobuf和我已經開始考慮下面簡單的例子protobuf的必填字段和默認值
message Entry {
required int32 id = 1;
}
由C++代碼中使用
#include <iostream>
#include "example.pb.h"
int main() {
std::string mySerialized;
{
Entry myEntry;
std::cout << "Serialization succesfull "
<< myEntry.SerializeToString(&mySerialized) << std::endl;
std::cout << mySerialized.size() << std::endl;
}
Entry myEntry;
std::cout << "Deserialization successfull "
<< myEntry.ParseFromString(mySerialized) << std::endl;
}
即使「ID」字段因爲尚未設置,所以序列化緩衝區的大小爲0(??)。
當我反序列化消息時發生錯誤:
[libprotobuf ERROR google/protobuf/message_lite.cc:123] Can't parse message of type "Entry" because it is missing required fields: id
它是一個正常的行爲?
弗朗西斯
PS-如果我初始化 「ID」 值爲0,該行爲是不同的
PPS-的SerializeToString
函數返回true,則ParseFromString
返回false
請不要這些方法有返回值來告訴您它是否有效嗎?你在檢查他們嗎? – 2013-03-12 11:22:08
請注意,零長度緩衝區在protobuf中是完全有效的 - 如果沒有要序列化的字段 – 2013-03-12 12:07:51