oyj*_*yjh 7 protocol-buffers protobuf-c
我想将 int/int64/double/float/uint32/uint64 序列化为 protobuf,我应该使用哪一个?哪一种更有效?
例如 :
message Test {
google.protobuf.Any any = 1; // solution 1
google.protobuf.Value value = 2; // solution 2
};
message Test { // solution 3
oneof Data {
uint32 int_value = 1;
double double_value = 2;
bytes string_value = 3;
...
};
};
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你最好使用oneof
.
您不能从内置类型打包或解包,例如 double、int32、int64 到google.protobuf.Any
。相反,您只能从消息打包或解包到消息,即从google::protobuf::Message
.
google.protobuf.Value
事实上,是 的包装oneof
:
message Value {
// The kind of value.
oneof kind {
// Represents a null value.
NullValue null_value = 1;
// Represents a double value.
double number_value = 2;
// Represents a string value.
string string_value = 3;
// Represents a boolean value.
bool bool_value = 4;
// Represents a structured value.
Struct struct_value = 5;
// Represents a repeated `Value`.
ListValue list_value = 6;
}
}
Run Code Online (Sandbox Code Playgroud)
另外,从 的定义中google.protobuf.Value
,您可以看到,没有 int32、int64 或 unint64 字段,而只有一个double
字段。恕我直言(纠正我,如果我错了),如果整数非常大,您可能会失去精度。通常,google.protobuf.Value
与 一起使用google.protobuf.Struct
。检查google/protobuf/struct.proto了解详细信息。
归档时间: |
|
查看次数: |
2922 次 |
最近记录: |