2016-03-21 14 views
0

に古いバッファをカプセル化します。 サンプルインスタンスを持つファイルシステム上にたくさんのファイルがあり、作成に時間がかかりました。 ここでランダムに2つのファイルを取り出し、それらをメモリに読み込んで、それらをカプセル化する新しいRequestを作成します。は、だから私は、スキームのこの種を持って新しいもの

私はC#で働いていると、この行は動作します:

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

が、私はちょうど新しいRequestのインスタンスでそれらを参照するための方法を見つけるように見えることはできません。 私はこれらのバッファをそのまま新しいビルダーに追加し、そのオフセットを同じBuilder内の新しいRequestに渡す方法が必要です。 これを新しいビルダーに再構築することは効率的ではありません。

どうすればこの問題を解決できますか?

答えて

1

現在、C#で自動的にテーブルをディープコピーする方法はありません。テーブルはバッファ内のあらゆる種類の場所を参照する可能性があるため、特殊なコード生成やリフレクションのいずれかを必要とする簡単な操作ではありません。

リフレクションを使用しているC++にはCopyTableがあります。これはC#に移植することも、C#から呼び出すこともできます。

新しいテーブルに既存のバッファをバイナリ形式で含める代わりに、abをubytesのベクトルにすることもできます。つまり、GetRootAsにアクセスしてアクセスする必要がありますが、これはまだすべて効率的です。

関連する問題