谷歌原型缓冲区 如何在原型文件中定义列表列表?

2022-09-03 00:10:19

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

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

如何在原型文件中定义它?


答案 1
  1. 您可以在称为消息的原型文件中声明自己的“类型”。
  2. 如果要声明列表,则应使用重复关键字。

将这两者结合起来,我们可以得到:

message ListOfListsOfStrings {
    repeated ListOfStrings listOfStrings=1;
}

message ListOfStrings {
    repeated string strings=1;
}

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


答案 2

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

  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


推荐