Android protobuf消息使用不可修改的列表,我尝试将其用作数据结构

Android protobuf消息使用不可修改的列表,我尝试将其用作数据结构,android,list,data-structures,protocol-buffers,Android,List,Data Structures,Protocol Buffers,我正在编写一个android应用程序,它正在与Web服务器通信以获取数据。我决定使用protobuf,所有的作品都像一个符咒 然而,我的问题是,我的数据集很大,我不能一次获得所有数据,所以我只需要获取顶层数据,然后在进行过程中要求更多数据(通过电话浏览) 我使用protoc生成了我的java类,它工作得很好,我得到了我想要的漂亮闪亮的对象结构(最初只有顶级数据)。 然而,我决定在我的应用程序中使用我得到的结构作为我的主要数据结构,因为该应用程序中的所有列表都是不可修改的,我以后不能用更多的数据进

我正在编写一个android应用程序,它正在与Web服务器通信以获取数据。我决定使用protobuf,所有的作品都像一个符咒

然而,我的问题是,我的数据集很大,我不能一次获得所有数据,所以我只需要获取顶层数据,然后在进行过程中要求更多数据(通过电话浏览)

我使用protoc生成了我的java类,它工作得很好,我得到了我想要的漂亮闪亮的对象结构(最初只有顶级数据)。 然而,我决定在我的应用程序中使用我得到的结构作为我的主要数据结构,因为该应用程序中的所有列表都是不可修改的,我以后不能用更多的数据进行扩展,这让我非常头疼

目前,我只是编辑了protoc生成的自动生成的java文件,以返回正常的列表,而不是不可修改的列表,但如果我以后需要重新生成该文件,这将非常愚蠢


怎么办?不使用protobuf对象作为存储?(在自定义对象已经存在时将所有数据复制到该对象似乎是浪费,更不用说编写自己的存储类了。)

您永远不应该修改生成的协议缓冲区类

生成的消息类在设计上是不可变的。要修改对象,需要使用其相应的
Builder
类从现有对象生成新消息,通过其setter方法对其进行操作,然后调用
build()
返回修改后的对象。例如:

person.toBuilder()
    .setName("Jeff")
    .addPhone(phoneNumber)
    .build();
请参阅protobuf教程中的“构建器与消息”:


谢谢。将传入的数据转换为builder,然后将其存储为我的应用程序数据结构,这是一种好的做法。还是建议使用独立的数据结构?只需一行代码就可以访问或创建给定对象的生成器,所以我不明白为什么要存储它。根据Google的说法,最佳实践是将生成的协议缓冲区类包装在您自己的特定于应用程序的类中(请参阅链接教程中的“协议缓冲区和O-O设计”).但是生成器返回一个新对象,并且由于我在.proto中嵌套了消息,因此它不允许我将新生成的对象插入父对象的列表中