google protobuffer如何定义proto文件中的列表列表?

时间:2016-04-19 10:01:33

标签: java protocol-buffers

我有一个列表列表字段,如下所示:

public class MyClass{
   private List<List<String>>
}

如何在proto文件中定义它?

3 个答案:

答案 0 :(得分:5)

  1. 您可以声明自己的&#34;类型&#34;在名为 message 的原型文件中。
  2. 如果您要声明列表,则应使用重复的关键字。
  3. 将这两者结合起来给我们:

    message ListOfListsOfStrings {
        repeated ListOfStrings listOfStrings=1;
    }
    
    message ListOfStrings {
        repeated string strings=2;
    }
    

    然后,您可以在原型中使用 ListOfListsOfStrings 消息。

答案 1 :(得分:0)

我想知道同样的事情,并且得知我可以做到:

  1. 定义为stream
  2. 定义为repeated

如下所示:

syntax = "proto3";

import "google/protobuf/empty.proto";

message Dummy {
  string foo = 1;
  string bar = 2;
}

message DummyList {
  repeated Dummy dummy = 1;
}

service DummyService {
  rpc getDummyListWithStream(google.protobuf.Empty) returns (stream Dummy) {}
  rpc getDummyListWithRepeated(google.protobuf.Empty) returns (DummyList) {}
}

那么,哪个?

  

通常,如果您的用例允许客户处理   一次收到一条消息,流是更好的选择。如果   您的客户端将一直处于阻塞状态,直到所有消息到达并   然后汇总处理它们,则重复字段可能是   适当,但是即使在这种情况下,流也可以像   很好,只是失去了一些潜在的可压缩性。

从此处引用:https://groups.google.com/forum/#!topic/grpc-io/F23vXwilTq0

答案 2 :(得分:0)

协议缓冲区没有任何类型的列表。但是列表是字符串的重复值。因此,我们可以创建一个具有字符串输入的消息,并使用来自另一条消息的重复关键字调用该消息

例如

message person{
   repeated nameList list = 1;
 }

 message nameList{
    string name = 1;
 }