Java 如何使用协议缓冲区?

Java 如何使用协议缓冲区?,java,protocol-buffers,Java,Protocol Buffers,我看了很多教程,但我不明白如何使用协议缓冲区 为什么是“消息用户”?为什么不是“类用户”?Eclipse是如何创建这样一条消息的? 为什么name=2?不是name=“Max” 为什么是“消息用户”?为什么不是“类用户” 谷歌协议缓冲区(GPB)的语法中没有类,而是消息。 此文件只是文本文件,它应该具有.proto扩展名。毕竟,您将在其上运行一个实用程序,它将生成真正的Java类,您可以导入这些类并在项目中轻松使用它们 编译协议缓冲区 protoc -I=$SRC_DIR --java_ou

我看了很多教程,但我不明白如何使用协议缓冲区

为什么是“消息用户”?为什么不是“类用户”?Eclipse是如何创建这样一条消息的? 为什么name=2?不是name=“Max”

为什么是“消息用户”?为什么不是“类用户”

谷歌协议缓冲区(GPB)的语法中没有
,而是
消息

此文件只是文本文件,它应该具有
.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文件放在其中的位置。