BinaryFormatter,精确的TYPE-SIZE缓冲区

时间:2011-05-09 20:16:18

标签: c# serialization binaryformatter

我有这个可序列化的类:

[Serializable]
public class myClass
{

     public byte myByte { get; set; }
     public short myShort { get; set; }
     public int myInt { get; set; }
}

知道BYTE类型是1个字节,类型SHORT是2个字节,INT类型是4个字节,我正在等待7个字节的缓冲区但是使用下面的代码我得到了232字节的缓冲区大小:

myClass mc = new myClass { myByte = 0xff, myShort = 0x009c, myInt = 0x00000045 };
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, mc);
byte[] buffer = ms.ToArray();

我想通过IP发送“确切类型大小的缓冲区”,而不必担心如下代码:

byte[] exactBuffer = new byte[sizeof(byte) + sizeof(short) + sizeof(int)];
exactBuffer[0] = mc.myByte;
byte[] bmyShort = BitConverter.GetBytes(mc.myShort);
System.Buffer.BlockCopy(bmyShort, 0, exactBuffer, sizeof(byte), bmyShort.Length);
byte[] bmyInt = BitConverter.GetBytes(mc.myInt);
System.Buffer.BlockCopy(bmyInt, 0, exactBuffer, sizeof(byte)+sizeof(short), bmyInt.Length);

我需要这个类是一个类而不是一个结构。有什么办法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用互操作和代码,如建议的int this post。但请注意,如果您没有指定语言,则允许该语言使用它所希望的任何内存布局,因此您应该使用StructLayout属性。

此外,如果您的类包含对其他类的任何引用,则不起作用。

通常,通过网络传输这样的数据往往不是解决方案,您应该使用BinaryFormatter,XML或JSON之类的东西。