1. 程式人生 > >C#網絡編程學習(7)---序列化和反序列化

C#網絡編程學習(7)---序列化和反序列化

mem serial 編程 length 格式 反序列化 formatter 序列化對象 種類

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#網絡編程學習(7)---序列化和反序列化