如何将平面缓冲区对象添加到新对象?

How to add a flatbuffer object to a new object?

我了解如何使用 FlatBufferBuilder 和特定类型构建器(例如 MyNestedTableBuilder)获取 WIPOffset,然后使用它获取 finished_data 缓冲区(&[u8])。然后我一直在使用 get_root 来获取基于缓冲区的对象,所以现在我有一个 MyNestedTable 的实例。然后我需要将它传递给另一个函数并通过一个新的构建器 MyTable 创建一个新的 table 实例,该实例具有字段 add_my_nested_table。如果不解压 MyNestedTable 并再次重建它(这看起来效率很低),我看不出如何做到这一点。我确信有一个很好的方法来做到这一点,我只是没有找到它,即使在研究了生成的代码和 API.

通常我们需要通过网络或通过 Rust 中的 API 调用传递对象并重用它们。

MyNestedTable 并不是一个真正的对象,它是序列化数据(您的 [u8])中数据的句柄,任何字段访问都会即时查找此数据。

任何 FlatBuffers 支持的语言(包括 Rust)的

None 的基础 APIs 都生成了允许自动重新序列化的代码,因为这在大多数情况下不是一个频繁的操作案例(您已经拥有序列化数据)。

方法是通过可选的 "object API",在 C++ 和其他一些语言中受支持,但 not yet in Rust。如您所见,CasperN 正在研究这样一个 API.

在那之前,您可以考虑使用 nested_flatbuffer 或其他一些构造将序列化数据直接传递到需要去的地方。