Tôi mới vào Protobuf và tôi đã bắt đầu xem xét các ví dụ nhỏ sauprotobuf Bắt buộc điền vào và mặc định giá trị
message Entry {
required int32 id = 1;
}
sử dụng bởi các mã 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;
}
Thậm chí nếu trường "id" là yêu cầu, vì nó chưa được thiết lập, kích thước của bộ đệm tuần tự là 0 (??).
Khi tôi deserialize thông điệp một lỗi xảy ra:
[libprotobuf ERROR google/protobuf/message_lite.cc:123] Can't parse message of type "Entry" because it is missing required fields: id
có phải là một hành vi bình thường?
Francesco
PS-Nếu tôi khởi tạo "id" với giá trị 0, hành vi này là khác nhau
pps- Chức năng SerializeToString
trả về true, các ParseFromString
false trả
Những phương pháp đó có trả lại giá trị cho bạn biết liệu nó có hoạt động hay không? bạn đang kiểm tra chúng? –
lưu ý rằng một bộ đệm độ dài bằng không là hoàn toàn hợp lệ trong protobuf - đó là những gì bạn nhận được nếu không có trường để tuần tự hóa –