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

Pan*_*ato 4 java protocol-buffers

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

public class MyClass{
   private List<List<String>>
}
Run Code Online (Sandbox Code Playgroud)

如何在proto文件中定义它?

kre*_*ems 10

  1. 您可以在名为message的 proto文件中声明自己的"类型" .
  2. 如果您要声明列表,则应使用重复关键字.

结合这两个给我们:

message ListOfListsOfStrings {
    repeated ListOfStrings listOfStrings=1;
}

message ListOfStrings {
    repeated string strings=2;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在proto中使用ListOfListsOfStrings消息.


RNA*_*RNA 8

我也想知道同样的事情,我了解到我可以:

  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) {}
}
Run Code Online (Sandbox Code Playgroud)

那么,哪一个?

一般来说,如果您的用例允许客户端一次处理一个传入消息,那么流是更好的选择。如果您的客户端只是阻塞,直到所有消息到达,然后汇总处理它们,则重复字段可能是合适的,但即使在这种情况下,除了失去一些潜在的可压缩性之外,流也可以正常工作。

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