C#网络编程学习(7)---序列化和反序列化

1、什么是序列化和反序列化

当客户端和服务器进行远程连接时,互相可以发送各种类型的数据。但都要先把这些对象转换为字节序列,才能在网络上进行传输。

序列化:就是发送方 把对象转换为字节序列的过程。
反序列化:就是接收方 把字节序列转换为对象的过程。

2、BinaryFormatter

BinaryFormatter以二进制格式序列化和反序列化对象。

属性:
Serializable:表示可以被序列化
NonSerializable:屏蔽序列化
方法:
binaryFormatter.Serialize(Stream stream,Object obj):把对象序列化到指定的流
binaryFormatter.Deserialize(Stream stream):把指定流反序列化成对象

序列化

/// <summary>
/// 序列化,Object对象转换为字节数组
/// </summary>
private static byte[] EncodeObj(object obj)
{
     using (MemoryStream ms = new MemoryStream())
     {
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(ms, obj);  //把obj序列化到ms流中
        byte[] data = new byte[ms.Length];
        Buffer.BlockCopy(ms.GetBuffer(), 0, data, 0, (int)ms.Length);

        return data;
     }
}

反序列化

/// <summary>
/// 反序列化
/// </summary>
private static object DecodeObj(byte[] data)
{
     using (MemoryStream ms = new MemoryStream(data))
     {
         BinaryFormatter bf = new BinaryFormatter();
         return bf.Deserialize(ms);
     }
}
上一篇:c#中字节数组byte[]、图片image、流stream,字符串string、内存流MemoryStream、文件file,之间的转换


下一篇:C#到Java:Base64String,MemoryStream,GZipStream