2016-08-05 8 views
0

ですこれはJSONを使用するとうまく動作するため、別の場所で問題になることはありません。Flatbufferバッファは、私は、スキーマを持って常に空

私はServerToClientMessageをシリアル化してバイト配列を返すと考えられるFlatSerialize拡張メソッドを持っています。しかし、私のbuffer.Dataは常に空です...それはちょうどゼロでいっぱいです。私のServerToClientMessageはデータを持っています - それはMessageIdとImageBytesの両方を持っています。ここで

は、直列化の拡張機能である:

public static byte[] FlatSerialize(this ServerToClientMessage message) { 
    var builder = new FlatBufferBuilder(1); 

    //Create an ID 
    var MessageId = builder.CreateString(message.MessageId.ToString()); 

    //Start the vector... 
    //Loop over each byte and add it - my god, is there not a better way? 
    FlatServerToClientMessage.StartImagebytesVector(builder, message.ImageBytes.Length); 
    foreach(var imageByte in message.ImageBytes) { 
    builder.AddByte(imageByte); 
    } 
    var imagebytes = builder.EndVector(); 

    //Start the FlatServerToClientMessage and add the MessageId and imagebytes 
    FlatServerToClientMessage.StartFlatServerToClientMessage(builder); 
    FlatServerToClientMessage.AddMessageid(builder, MessageId); 
    FlatServerToClientMessage.AddImagebytes(builder, imagebytes); 

    //End the FlatServerToClientMessage and finish it... 
    var flatMessage = FlatServerToClientMessage.EndFlatServerToClientMessage(builder); 
    FlatServerToClientMessage.FinishFlatServerToClientMessageBuffer(builder, flatMessage); 

    var buffer = builder.DataBuffer; 
    return buffer.Data; 
    } 

誰もが私のbuffer.Dataがちょうどゼロで満たされている理由の任意のアイデアを持っていますか?

答えて

1

バッファが空ではなく、Dataのオフセット0で開始されません(FlatBuffersは先頭に戻るように構築されています)。開始位置はOffsetです。そこからバイトにアクセスできます。または、FlatBufferBuilder.SizedByteArray()を呼び出して、FlatBufferデータのみを持つバイト配列を作成することもできます。

+0

ありがとうございました! – pookie

関連する問題