使用平面缓冲区从 C# 序列化到本机内存缓冲区

Serialize into native memory buffer from C# using flatbuffers

是否可以使用 C# 中的 flatbuffers 将对象序列化到本机(非托管)内存缓冲区? 所以我想执行以下步骤:

  1. 从本机内存分配本机内存缓冲区
  2. 在 C# 中创建对象并将它们序列化到分配的缓冲区中
  3. 将此内存缓冲区发送到 C++ 进行反序列化

我正在考虑 C# 中的一些自定义内存缓冲区分配器,或者某种将内存缓冲区所有权从 C# 转移到 C++ 的方法。

一般来说,我想避免在将数据从 C# 发送到 C++ 时复制内存,反之亦然。我希望这个内存缓冲区在 C# 和 C++ 之间共享。

我该怎么做?

是的,如果您使用 C++/CLI。 bool、32 位 int、short 等基本数据类型相同。对于其他类型,请查看 msclr::interop::marshal_as<>。

相似post:C++/CLI Converting from System::String^ to std::string

不,当前的 FlatBuffers 实现被硬编码为写入常规字节数组。之后你可以将这个数组复制到本机内存,或者像 @pm100 说的那样,固定它。

FlatBuffers 中的所有序列化都经过一个称为 ByteBuffer 的抽象,因此如果您为本机内存实现了它,则可以相对容易地直接使用它。