我看了很多教程,但我无法理解如何使用协议缓冲区
为什么“消息用户”?为什么不“班级用户”?以及Eclipse如何创建这样的消息? 为什么name = 2? not name =“Max”
ption java_outer_classname="ProtoUser";
message User {
required int32 id = 1; // DB record ID
required string name = 2;
required string firstname = 3;
required string lastname = 4;
required string ssn= 5;
// Embedded Address message spec
message Address {
required int32 id = 1;
required string country = 2 [default = "US"];;
optional string state = 3;
optional string city = 4;
optional string street = 5;
optional string zip = 6;
enum Type {
HOME = 0;
WORK = 1;
}
optional Type addrType = 7 [default = HOME];
}
repeated Address addr = 16;
}
答案 0 :(得分:4)
为什么“消息用户”?为什么不“上课用户”?
Google协议缓冲区(GPB)的语法中没有class
,而是message
。
https://developers.google.com/protocol-buffers/docs/style
此文件只是文本文件,应该有.proto
扩展名。毕竟,您将在其上运行一个实用程序,它将生成可以导入并在项目中轻松使用的真正Java类。
https://developers.google.com/protocol-buffers/docs/javatutorial
编译协议缓冲区
protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
required string lastname = 4;
4代表字段ID ,而不是值,它将用于生成位流。
答案 1 :(得分:0)
Protobuffer 使用 message(keyword) 代替 class 在类中定义其结构。架构。 例如
message Person{
string name = 1;
repeated string id = 2;
Type phoneType = 3;
}
enum Type{
CellPhone = 0;
HomePhone = 1;
}
在上面的例子中,我们定义了 Person Message 的结构。 它有 name 数据类型是字符串,id 是字符串和类型的数组(当您只期望某些值时,则使用枚举。在这种情况下,我们假设 phoneNumber 可以是 CellPhone 或 HomePhone。如果有人正在发送任何其他值,然后 IT 将通过 UNKNOWN 原型值异常)
required:表示需要参数
要使用 proto 首先使用 mvn clean install 创建 proto 类 然后创建protobuilder 为上述 proto 设置的 Protobuilder
Person person = Person.newBuilder().setName("testName")
.setPhoneType(Type.CellPhone)
.addAllId(listIds)
.build;
一旦您设置了值,您将无法更改它。如果要更改该值,则需要创建另一个原型。 Pesron person1 = Person.newBuilder(person).setName("ChangeName").build;
person1 将具有名称 ChangeName、phoneType CellPhone 和 ids 字符串数组。