gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:10:14 25 4
gpt4 key购买 nike

我正在编写一个与网络服务器通信以获取数据的 Android 应用程序。我决定使用 protobuf,所有的工作都很有魅力。

但我的问题是,我的数据集很大,我无法一次获取所有数据,所以我只获取顶层数据,然后在进行过程中请求更多数据(在手机上浏览)。

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

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

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

最佳答案

永远不要修改生成的 Protocol Buffer 类。

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

person.toBuilder()
.setName("Jeff")
.addPhone(phoneNumber)
.build();

请参阅 protobuf 教程中的“Builders vs. Messages”:

http://code.google.com/apis/protocolbuffers/docs/javatutorial.html#builders

关于android - protobuf 消息使用不可修改的列表,我正在尝试将其用作数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7922936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com