我了解如何使用 FlatBufferBuilder
和特定类型构建器(例如,MyNestedTableBuilder
)获取 WIPOffset
,然后使用它来获取finished_data
缓冲区 (&[u8]
)。然后我一直在使用 get_root
获取基于缓冲区的对象,所以现在我有一个 MyNestedTable
的实例。然后我需要将其传递给另一个函数并通过新构建器 MyTable
创建一个新表实例,该构建器具有字段 add_my_nested_table
。如果不解压 MyNestedTable
并再次重建它(这看起来效率很低),我看不出如何做到这一点。我确信有一个很好的方法可以做到这一点,我只是没有找到它,即使在研究了生成的代码和 API 之后也是如此。
通常我们需要通过网络或通过 Rust 中的 API 调用传递对象并重用它们。
最佳答案
MyNestedTable
并不是真正的对象,它是序列化数据(您的 [u8]
)中数据的句柄,任何字段访问都会查找此数据即时。
任何 FlatBuffers 支持的语言(包括 Rust)的基本 API 都没有生成允许自动重新序列化的代码,因为在大多数用例中这不是一个频繁的操作(你已经有序列化数据)。
方法是通过可选的“对象 API”,C++ 和其他一些语言支持,但是 not yet in Rust .如您所见,CasperN 正在开发这样的 API。
在那之前,您可以考虑使用 nested_flatbuffer
或其他一些构造将序列化数据直接传递到需要去的地方。
关于rust - 如何将 FlatBuffers 对象添加到新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58209692/