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

Java google protobuffer如何在proto文件中定义列表列表?,java,protocol-buffers,Java,Protocol Buffers,我有一个具有列表字段列表的类,如下所示: public class MyClass{ private List<List<String>> } 公共类MyClass{ 私人名单 } 如何在proto文件中定义它 您可以在名为message的原型文件中声明自己的“类型” 如果您想声明一个列表,您应该使用repeated关键字 将这两者结合起来,我们可以: message ListOfListsOfStrings { repeated ListOfStrin

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

public class MyClass{
   private List<List<String>>
}
公共类MyClass{
私人名单
}
如何在proto文件中定义它

  • 您可以在名为message的原型文件中声明自己的“类型”
  • 如果您想声明一个列表,您应该使用repeated关键字
  • 将这两者结合起来,我们可以:

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

    然后,您可以使用ListOfListOfStrings,因为您的原型中的消息是适当的。

    我也在想同样的事情,我知道我可以:

  • 定义为
  • 定义为重复的
  • 如下图所示:

    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) {}
    }
    
    那么,哪一个

    通常,如果您的用例允许客户机处理 每次传入一条消息,流是更好的选择。如果 您的客户端将一直处于阻塞状态,直到所有消息到达并发送 然后对它们进行聚合处理,重复字段可能会被删除 适当,但即使在这种情况下,流也会同样工作 除了失去一些潜在的压缩性


    此处引用:

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

    比如说

    message person{
       repeated nameList list = 1;
     }
    
     message nameList{
        string name = 1;
     }