【问题标题】:Clone structure of google protocol buffer messages to structure of builder objects将谷歌协议缓冲区消息的结构克隆到构建器对象的结构
【发布时间】:2012-10-08 19:30:07
【问题描述】:

我们使用协议缓冲区将数据存储在数据库中(作为 blob)。在某些时候,我们再次读取它们,需要修改它们并再次存储它们。

问题是,协议缓冲区消息对象是不可变的。我们想到的只是使用协议缓冲区消息作为原型创建一个新的构建器对象:

Foo.Builder.newBuilder(prototype)

这基本上有效。但是由于我们有一个嵌套结构,所以原型对象实际上包含属性本身就是消息,这是行不通的。摘自the documentation

由于嵌入的消息和字符串对象是不可变的,它们在原始和副本之间共享。

有没有办法将整个结构克隆到可变的新构建器对象?

【问题讨论】:

    标签: clone message protocol-buffers immutability builder


    【解决方案1】:

    嗯,有点。我已经使用 DynamicMessage.Builder、Descriptor 和 FieldDescriptor 完成了这项工作。我使用完全限定名称递归地将对象图遍历到要更新的属性。找到后,我更新它并在 DynamicMessage.Builder(s) 上调用 build 备份堆栈。特别是在处理重复字段时,这并不简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2019-01-04
      相关资源
      最近更新 更多