【发布时间】:2013-03-12 11:16:47
【问题描述】:
我是 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- 如果我用值 0 初始化“id”,则行为不同
pps-SerializeToString 函数返回 true,ParseFromString 返回 false
【问题讨论】:
-
这些方法没有返回值来告诉你它是否有效吗?你在检查吗?
-
请注意,零长度缓冲区在 protobuf 中完全有效 - 如果没有要序列化的字段,这就是您得到的结果
标签: c++ protocol-buffers