Java 如何使用协议缓冲区?
我看了很多教程,但我不明白如何使用协议缓冲区 为什么是“消息用户”?为什么不是“类用户”?Eclipse是如何创建这样一条消息的? 为什么name=2?不是name=“Max” 为什么是“消息用户”?为什么不是“类用户” 谷歌协议缓冲区(GPB)的语法中没有Java 如何使用协议缓冲区?,java,protocol-buffers,Java,Protocol Buffers,我看了很多教程,但我不明白如何使用协议缓冲区 为什么是“消息用户”?为什么不是“类用户”?Eclipse是如何创建这样一条消息的? 为什么name=2?不是name=“Max” 为什么是“消息用户”?为什么不是“类用户” 谷歌协议缓冲区(GPB)的语法中没有类,而是消息。 此文件只是文本文件,它应该具有.proto扩展名。毕竟,您将在其上运行一个实用程序,它将生成真正的Java类,您可以导入这些类并在项目中轻松使用它们 编译协议缓冲区 protoc -I=$SRC_DIR --java_ou
类
,而是消息
。
此文件只是文本文件,它应该具有.proto
扩展名。毕竟,您将在其上运行一个实用程序,它将生成真正的Java类,您可以导入这些类并在项目中轻松使用它们
编译协议缓冲区
protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
所需字符串lastname=4代码>
4代表字段id,不是值,它将用于生成位流
为什么是“消息用户”?为什么不是“类用户”
谷歌协议缓冲区(GPB)的语法中没有类
,而是消息
。
此文件只是文本文件,它应该具有.proto
扩展名。毕竟,您将在其上运行一个实用程序,它将生成真正的Java类,您可以导入这些类并在项目中轻松使用它们
编译协议缓冲区
protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
所需字符串lastname=4代码>
4代表字段id,不是值,它将用于生成位流。Protobuffer使用消息(关键字)而不是类
在类内部定义其结构。模式。
比如说
message Person{
string name = 1;
repeated string id = 2;
Type phoneType = 3;
}
enum Type{
CellPhone = 0;
HomePhone = 1;
}
在上面的示例中,我们正在定义Person消息的结构。
它有一个数据类型是字符串的名称,id是字符串和类型的数组(当您只需要某些值时,则使用枚举。在这种情况下,我们假设phoneNumber可以是手机或家庭电话。若有人发送任何其他值,则它将通过未知原型值异常)
必填:表示参数为必填项
要使用proto,请首先使用mvn clean install创建proto类
然后创建protobuilder
要为上述proto设置的Protobuilder
Person person = Person.newBuilder().setName("testName")
.setPhoneType(Type.CellPhone)
.addAllId(listIds)
.build;
一旦设置了该值,就无法更改它。如果要更改该值,则需要创建另一个proto。
Pesron person1=Person.newBuilder(Person.setName(“ChangeName”).build
person1将具有名称ChangeName、phoneType Phone和ID字符串数组
更多信息:Protobuffer使用消息(关键字)而不是类
在类内部定义其结构。模式。
比如说
message Person{
string name = 1;
repeated string id = 2;
Type phoneType = 3;
}
enum Type{
CellPhone = 0;
HomePhone = 1;
}
在上面的示例中,我们正在定义Person消息的结构。
它有一个数据类型是字符串的名称,id是字符串和类型的数组(当您只需要某些值时,则使用枚举。在这种情况下,我们假设phoneNumber可以是手机或家庭电话。若有人发送任何其他值,则它将通过未知原型值异常)
必填:表示参数为必填项
要使用proto,请首先使用mvn clean install创建proto类
然后创建protobuilder
要为上述proto设置的Protobuilder
Person person = Person.newBuilder().setName("testName")
.setPhoneType(Type.CellPhone)
.addAllId(listIds)
.build;
一旦设置了该值,就无法更改它。如果要更改该值,则需要创建另一个proto。
Pesron person1=Person.newBuilder(Person.setName(“ChangeName”).build
person1将具有名称ChangeName、phoneType Phone和ID字符串数组
更多信息:您从哪里获取此文件?你的问题到底是什么?我想做一个简单的例子,看看答案。看来你没有仔细阅读手册。这个文件是从哪里来的?你的问题到底是什么?我想做一个简单的例子,看看答案。您似乎没有仔细阅读手册。我没有任何编译经验,我无法理解“编译您的协议缓冲区协议-I=$SRC_DIR--java_out=$DST_DIR$SRC_DIR/addressbook.proto…”是否使用CMD$SRC_DIR$DST_DIR?编译意味着生成真正的Java文件,包括在项目代码中。是,使用cmd
运行protoc
。SRC_DIR是proto文件所在的位置,DST_DIR是您希望生成java文件的位置。我没有任何编译经验,我无法理解“编译您的协议缓冲区protoc-I=$SRC_DIR--java_out=$DST_DIR$SRC_DIR/addressbook.proto…”使用CMD$SRC_DIR$DST_DIR?编译意味着生成真正的Java文件,包括在项目代码中。是,使用cmd
运行protoc
。SRC_DIR是proto文件所在的位置,DST_DIR是要将generate java文件放在其中的位置。