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

时间:2017-07-07 21:34:19

标签: c# c++ interop flatbuffers

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

  1. 从本机内存分配本机内存缓冲区
  2. 在C#中创建对象并将它们序列化为已分配的缓冲区
  3. 将此内存缓冲区发送到C ++以进行反序列化
  4. 我正在考虑使用C#中的某个自定义内存缓冲区分配器,或者将某种内存缓冲区的所有权从C#转移到C ++。

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

    我该怎么做?

2 个答案:

答案 0 :(得分:1)

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

FlatBuffers中的所有序列化都经历了一个名为ByteBuffer的抽象,所以如果你为本机内存实现了它,那么可以相对容易地直接使用它。

答案 1 :(得分:0)

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

类似文章:C++/CLI Converting from System::String^ to std::string