2

是否可以flatbuffers在 C# 中将对象序列化为本机(非托管)内存缓冲区?所以我想做这些步骤:

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

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

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

我怎么做?

4

2 回答 2

1

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

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

于 2017-07-08T02:19:59.397 回答
0

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

类似的帖子:C++/CLI Converting from System::String^ to std::string

于 2017-07-07T21:45:16.370 回答