zoukankan      html  css  js  c++  java
  • 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();
            }
    
    
    
     
  • 相关阅读:
    MIne FirstBlog
    P6563 [SBCOI2020]一直在你身旁
    P6563 [SBCOI2020]一直在你身旁
    T122085 [SBCOI2020]时光的流逝
    LC 918. Maximum Sum Circular Subarray
    1026 Table Tennis
    LC 1442. Count Triplets That Can Form Two Arrays of Equal XOR
    LC 1316. Distinct Echo Substrings
    LC 493. Reverse Pairs
    1029 Median (二分)
  • 原文地址:https://www.cnblogs.com/yy1234/p/8193098.html
Copyright © 2011-2022 走看看