【问题标题】:How to copy a flatbuffer to other如何将平面缓冲区复制到其他缓冲区
【发布时间】:2021-01-28 07:48:01
【问题描述】:

我有一个嵌套的平面缓冲区,如下所示:

struct Flat_A {
    // s.t
}

struct Flat_B {
    // s.t
}

struct Flat_C {

    flata : Flat_A

    flatb : Flat_B
}

我想先创建 flata 的 flatbuffer:Flat_A(在与其父级不同的 flatbufferbuilder 中),然后将此 flatbuffer 复制到父级缓冲区(Flat_C)。

我看到函数 CopyTable,但它似乎只是复制到一个新的平面缓冲区,而不是像 Flat_C 这样的 EXIST 缓冲区。 有什么办法吗?

【问题讨论】:

    标签: c++ grpc flatbuffers


    【解决方案1】:

    CopyTable 实际上是为此目的工作的,它可以从现有缓冲区复制到不同的构建器。但它需要reflection,非常笨拙,我建议不要使用它。

    如果你真的不能一口气构造C,最好的选择是将flata字段更改为flata : [ubyte] (nested_flatbuffer: "Flat_A")。您可以将 A 的整个序列化字节复制到 flata,然后您可以通过获取 flata 的根来访问它(应该为您生成一个自动执行此操作的访问器)。这实际上几乎与直接使用 Flat_A 类型一样有效,因为它仍在原地访问这个嵌套缓冲区。

    【讨论】:

    • 嗨@Aardappel,谢谢你的回答。如果我将 flata 字段更改为 flata : [ubyte],但仍将其保留为 flatc 字段,是否可以在不使用 CopyTable 的情况下将 flata 的 flatbuffer 复制到其中?
    • 是的,它只是一个字节数组。你可以使用memcpy
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 2014-12-05
    相关资源
    最近更新 更多