将旧缓冲区封装在新缓冲区中

时间:2016-03-21 19:31:43

标签: c# flatbuffers

所以我有这种方案:

table Request {
  a:Sample;
  b:Sample;
}

表Sample有多个字符串向量,其实例非常大。 我的文件系统上有很多带有Sample实例的文件,这花了我一些时间来创建。 现在我想随机取两个文件,将它们读入内存并创建一个封装它们的新请求。

我正在使用c#,这条线有效:

var a = Sample.GetRootAsSample(new ByteBuffer(System.IO.File.ReadAllBytes(pathToA))); 
var b = Sample.GetRootAsSample(new ByteBuffer(System.IO.File.ReadAllBytes(pathTob)));

但我似乎找不到在新的Request实例中引用它们的方法。 我需要一些方法将这些缓冲区添加到新构建器中,然后将它们的Offset传递给同一构建器中的新Request。 在一个新的建设者中重新建立它们并不会有效。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

目前无法在C#中自动深层复制表格。由于表可能引用缓冲区中的各种位置,因此这不是一个简单的操作,需要特殊用途的代码生成或反射。

使用反射在C ++中有CopyTable。这可以移植到C#或从C#调用。

另一种方法是以二进制形式在新表中包含现有缓冲区,即make ab ubytes向量。这意味着你必须在它们上面调用GetRootAs来访问它们,但这仍然非常有效。