从protobuf生成的文件中获取可更改的对象

时间:2011-10-31 16:41:17

标签: java android data-structures protocol-buffers

我有一个相当简单的Android应用程序,它从Web服务器获取protobuf数据,并且有一个由protoc生成的java类。

现在我在我的应用中不需要除此数据之外的任何其他数据。所以我认为我只是简单地使用这些数据而不是包装它,因为这只会是一些额外的工作。

然而,有时我用新数据(proto文件中的嵌套消息)扩展树,然后我需要能够在当前树中插入这些,因为java类总是返回unmodifiableList。

我现在想我可以用反射得到列表,因此可以修改。它看起来不是一个很好的解决方案,但它可以为包装课程和其中的所有内容做额外的工作。所以我的实际问题是,这是一个很大的不,或者没关系。

我读到某个地方甚至在google中他们认为将protobuf对象作为数据结构或仅作为纯发送/接收消息是聪明的。

1 个答案:

答案 0 :(得分:2)

协议缓冲区消息实例是不可变的by design

如果您想操作最初来自protobuf的数据,请创建一个新的Builder,使用mergeFrom预填充原始字段:

MyMessage originalMessage = getMyMessage();
MyMessage.Builder newMessage = new MyMessage.Builder();
newMessage.mergeFrom(originalMessage);