Tal*_*Bin 1 .net c# conventions
当我试图将一个对象转换为字节数组时,我得到了一个奇怪的数组.这是代码:
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, obj);
Console.WriteLine(ByteArrayToString(ms.ToArray()));
}
//int obj = 50;
//string ByteArrayToString(byte[] byteArr) the functionality of this method is pretty obvious
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
"00 01 00 00 00 FF FF FF FF 01 00 00 00 00 00 00 04 01 00 00 00 0C 53 79 73 74 65 6D 2E 49 6E 74 33 32 01 00 00 00 07 6D 5F 76 61 6C 75 65 00 08 32 00 00 00 0B"
有人可以向我解释为什么?:)最佳结果应该只是"32 00 00 00".
由于序列化程序需要提供足够的信息来反序列化数据,因此它必须包含有关要序列化的对象的一些元数据.具体来说,
53 79 73 74 65 6D 2E 49 6E 74 33 32
Run Code Online (Sandbox Code Playgroud)
部分代表 System.Int32
如果您使用BinaryWriter它的Write(Int32)方法而不是它的方法,您将获得所需的效果:您的内存流将只包含整数中的四个字节.如果不知道你Int32在流中写了一个,你将无法反序列化它.