如何使用协议缓冲区?

时间:2013-03-14 14:59:44

标签: java protocol-buffers

我看了很多教程,但我无法理解如何使用协议缓冲区

为什么“消息用户”?为什么不“班级用户”?以及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;
}

2 个答案:

答案 0 :(得分:4)

  

为什么“消息用户”?为什么不“上课用户”?

Google协议缓冲区(GPB)的语法中没有class,而是messagehttps://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 字符串数组。

更多信息:https://developers.google.com/protocol-buffers