Java 如何存储数据结构匹配.proto

Java 如何存储数据结构匹配.proto,java,android,data-structures,protocol-buffers,Java,Android,Data Structures,Protocol Buffers,我有一个非常简单的android应用程序,它使用protobuf从服务器获取数据,然后让用户浏览数据树(简化) 现在我只想在我的结构中使用这些数据,所以我使用protobuf reply(通过自动生成的类)作为我的内部数据集 问题是,我想能够更新其中的一些数据,也可以从服务器获取更多数据,并附加到树上。。。这是不可能的,因为数据是不可变的 所以我的问题是,如何用尽可能少的计算能力将protobuf消息存储为可更改的数据结构 我是否必须创建自己相应的数据类结构(似乎是双重工作),或者有其他方法吗?

我有一个非常简单的android应用程序,它使用protobuf从服务器获取数据,然后让用户浏览数据树(简化)

现在我只想在我的结构中使用这些数据,所以我使用protobuf reply(通过自动生成的类)作为我的内部数据集

问题是,我想能够更新其中的一些数据,也可以从服务器获取更多数据,并附加到树上。。。这是不可能的,因为数据是不可变的

所以我的问题是,如何用尽可能少的计算能力将protobuf消息存储为可更改的数据结构


我是否必须创建自己相应的数据类结构(似乎是双重工作),或者有其他方法吗?

您的protobuf消息是可变的数据结构。您可以通过
Builder
界面修改它们,并可以使用Android本地文件存储或SQLite BLOB存储它们

请参阅以下示例:


我使用的方法是实现我自己的类型,这些类型镜像protobuf类型,但允许额外的功能,如就地修改,并且还实现了一组转换函数,以在每对类型之间进行转换。然后,我只在实际需要通过线路发送或接收信息时才使用Protobuf生成的类。

根据您第一个链接中的文档“协议缓冲区编译器生成的消息类都是不可变的”。您能否提供一个示例,说明如何使用生成器修改现有的消息对象(而不只是创建一个新的消息对象)。
myObject=myObject.toBuilder().setFoo(“bar”).build()…我想我不明白为什么“简单地创建一个新的”是这样一个问题。我不是说这是一个问题。我只是觉得很清楚你没有修改原始对象是很有帮助的,因为它不支持iy。是的,我需要改变实际的结构,而不仅仅是得到一个我可以改变的对象。所以为了清除,我有嵌套的消息。如果我用builder更改内部对象,外部对象将不允许我将其重新插入列表。这太可惜了,不仅需要双重编码工作,还需要额外的cpu能力来转换对象。在android中,实例化对象会受到性能的惩罚。这是最好的办法。