0

所以我有这样的计划:

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

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

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

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

但我似乎找不到在新的 Request 实例中引用它们的方法。我需要某种方式将这些缓冲区按原样添加到新构建器,然后将它们的偏移量传递给同一个构建器中的新请求。在新的构建器中重新构建它们不会有效。

我怎样才能做到这一点?

4

1 回答 1

1

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

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

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

于 2016-03-21T23:46:39.157 回答