簡體   English   中英

Flatbuffer緩沖區始終為空

[英]Flatbuffer buffer is always empty

我有一個架構:

namespace ExampleApp.Assets.Communications;

table FlatServerToClientMessage {
  messageid:string;
  imagebytes:[ubyte];
}

root_type FlatServerToClientMessage;

為了清楚起見,這是ServerToClientMessage.cs

public class ServerToClientMessage : EventArgs
{
    public Guid MessageId { get; set; }
    public byte[] ImageBytes { get; set; }
}

我試圖通過TCP發送ServerToClientMessage 當我使用JSON時,此方法工作正常,因此在其他地方不是問題。

我有一個FlatSerialize擴展方法,該方法應該序列化ServerToClientMessage並返回一個字節數組。 但是,我的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只用零填充?

您的緩沖區不是空的,它只是不從Data中的偏移量0開始(FlatBuffers是從后構建的),而是從Offset開始。 您可以從那里訪問字節。 或者,您可以調用FlatBufferBuilder.SizedByteArray()創建僅包含FlatBuffer數據的字節數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM