【问题标题】:how to store data structure matching .proto如何存储匹配.proto的数据结构
【发布时间】:2011-10-28 11:41:25
【问题描述】:

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

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

问题是我希望能够更新其中的一些数据,并从服务器获取更多数据并附加到树...由于数据是不可变的,这是不可能的。

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

我必须自己制作相应的数据类结构(似乎是双重工作)还是有其他方法?

【问题讨论】:

    标签: java android data-structures protocol-buffers


    【解决方案1】:

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

    【讨论】:

    • 可惜了,不仅是双重编码工作,还有额外的cpu功率转换对象。
    • 在 android 中,实例化对象会受到性能的影响。这是最好的方法。
    【解决方案2】:

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

    参考这些例子:

    【讨论】:

    • 根据您的第一个链接中的文档“协议缓冲区编译器生成的消息类都是不可变的”。您能否提供一个示例来说明如何使用 Builder 来修改现有的消息对象(而不是简单地创建一个新对象)。
    • myObject = myObject.toBuilder().setFoo("bar").build(); ...我想我不明白为什么“简单地创建一个新的”是这样一个问题。
    • 我并不是说这是个问题。我只是认为清楚你没有修改原始对象是有帮助的,因为它不支持 iy。
    • 是的,我需要更改实际结构,而不仅仅是获得可以更改的对象。
    • 所以要清除我有嵌套的消息。如果我用 builder 更改内部对象,外部对象不会让我将其重新插入到列表中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多