BinaryReader 自己写序列化


听说过BinaryReader和BinaryWriter吗?

序列化无非就是网络通信时所使用的传输数据的方式,而BinaryWriter可以将数据以二进制的方式写入到流当中。

比如Int32型的1用BinaryWriter写入之后就是 01 00 00 00 四个字节,然而用普通的序列化则为 00 31 两个字节(因为C#默认采用Unicode编码,所有的字符都是两个字节)。虽然这里一看不如普通的序列化好,但是如果数值大一点的话——比如 65536 的话,普通序列化则为 00 36 00 35 00 35 00 33 00 36 共计10个字节,但是用BinaryWriter则是 00 00 01 00,还是四个字节。

如果客户端这边使用了BinaryWriter,那么相对的在服务端那边就要使用BinaryReader来读取内容。切记,写入的顺序和读取的顺序要相同,并且读取时需要指定类型。

比如BinaryWriter写入了Int32的65536,那么就需要用BinaryReader的ReadInt32()方法来读取。

这种方法虽然写起来麻烦,但是实际上少了类型转换,是更加纯粹的内存操作,再加上数据体积较小,所以我认为这种方法应该比默认的序列化要快。

     static void Main(string[] args)
        {
            var fs = new MemoryStream();
            var bw = new BinaryWriter(fs);
            bw.Write("aaaaaaaaaaaa");
            bw.Write(55d);

            var br = new BinaryReader(fs);
            br.BaseStream.Position = 0;
            var companycode = br.ReadString();
            var ggg = br.ReadDouble();

            fs.Close();
            bw.Close();
            br.Close();

            Console.ReadKey();
        }


 
原文地址:https://www.cnblogs.com/yy1234/p/8193098.html