rust - 如何将 FlatBuffers 对象添加到新对象?

标签 rust flatbuffers

我了解如何使用 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/

相关文章:

random - 如何使用兰德 crate 更换发电机?

rust - 通过循环和 push() 或通过 collect() 创建一个充满顺序 u64 的大型 Vec 是否更快?

c++ - 如何正确删除从磁盘读取的 FlatBuffer 对象

c - flatcc union 作为顶部元素

json - Flatbuffer 与 CBOR

rust - 如何构建一个没有共享库的 Rust 应用程序?

Rust Actix:为 System::current() 获取 SystemRunner

rust - 从 char 获取字节序列 (u8)

python - 如何使用 Python 将 FlatBuffer 消息从二进制格式转换为人类可读的文本格式?

json - Swift:解析 10k 行数据的最高效方法?