使用平面缓冲区从 C# 序列化到本机内存缓冲区
Serialize into native memory buffer from C# using flatbuffers
是否可以使用 C# 中的 flatbuffers
将对象序列化到本机(非托管)内存缓冲区?
所以我想执行以下步骤:
- 从本机内存分配本机内存缓冲区
- 在 C# 中创建对象并将它们序列化到分配的缓冲区中
- 将此内存缓冲区发送到 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
的抽象,因此如果您为本机内存实现了它,则可以相对容易地直接使用它。
是否可以使用 C# 中的 flatbuffers
将对象序列化到本机(非托管)内存缓冲区?
所以我想执行以下步骤:
- 从本机内存分配本机内存缓冲区
- 在 C# 中创建对象并将它们序列化到分配的缓冲区中
- 将此内存缓冲区发送到 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
的抽象,因此如果您为本机内存实现了它,则可以相对容易地直接使用它。