C#扁平缓冲区字节数组

C#扁平缓冲区字节数组,c#,serialization,flatbuffers,C#,Serialization,Flatbuffers,我使用序列化一些数据,然后通过TCP通过网络发送。我可以在客户端应用程序中对其进行反序列化,但是我发送的一些图像数据有问题 我的flatbuffers模式定义如下: namespace datapacket; table FlatDataPacket { id:string; framedata:[ubyte]; } root_type FlatDataPacket; 我将数据反序列化如下: ByteBuffer bb = new ByteBuffer(buffer); var

我使用序列化一些数据,然后通过TCP通过网络发送。我可以在客户端应用程序中对其进行反序列化,但是我发送的一些图像数据有问题

我的flatbuffers模式定义如下:

namespace datapacket;

table FlatDataPacket {
  id:string;
  framedata:[ubyte];
}

root_type FlatDataPacket;
我将数据反序列化如下:

ByteBuffer bb = new ByteBuffer(buffer); 
var flatDataPacket = FlatDataPacket.GetRootAsFlatDataPacket(bb);
现在,在
flatDataPacket
中,我的
Id
很好,但是,我的
imagedata
长度是8,当我尝试转换为图像时,我得到一个异常:

for (int i = 0; i < flatDataPacket.FramedataLength; i++)
{
    incomingPacket.FrameBytes[i] = flatDataPacket.GetFramedata(i);
}

Image returnImage = Image.FromStream(new MemoryStream(incomingPacket.FrameBytes));//Throws exception
for(int i=0;i
异常

中发生“System.ArgumentException”类型的异常 System.Drawing.dll,但未在用户代码中处理

其他信息:参数无效


我做错了什么?如果我在没有flatbuffers的情况下执行此操作,并使用JSON或只发送图像数据,则图像可以正常发送和反序列化。我是否使用了不正确的数据类型
ubyte

通常会因为编码而出现类似的错误。发送图像时需要使用UTF8编码。大多数流类默认使用ASCII编码,这将删除会损坏图像的不可打印字符。首先验证原始图像字节数是否与接收到的图像字节数匹配。然后找出字节数发生变化的地方。您似乎正确地使用了API,因此可能发生的情况是传输过程中出现了错误。确保将用于传输的任何方法设置为将此数据作为二进制数据处理(而不是@jdweng建议的UTF-8)。UTF8是二进制的。忽略Aardappel的评论。谢谢你们,伙计们,但我发现了我的问题。这是因为我错误地设置了从我的远程C++应用程序发送的数据大小。以前:
auto-framedatavector=builder.CreateVector(data.GetData(),sizeof(data.GetData())新的工作版本:
auto-framedatavector=builder.CreateVector(data.GetData(),data.Num())