亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

在 .NET Compact Framework 2.0 中使用序列化

系統 2103 0

1. 序列化概述

序列化(Serialization)是.NET平臺最酷的特性之一。利用序列化技術,可以實現對象的備份和還原。序列化可以將內存中的對象(或對象圖)序列化為數據流,并保存到磁盤上進行持久化;還可以將數據流反序列化為對象,實現對象的還原。序列化技術在分布式系統的數據傳輸中得到充分的利用,如:XML Web Service 利用XML序列化實現跨平臺,.NET Remoting 則用到了二進制序列化和SOAP序列化。

.NET Compact Framework 2.0 支持XML序列化,不支持二進制序列化和SOAP序列化。而 .NET Compact Framework 1.0 連XML序列化都不支持。不過 OpenNETCF 1.x 為 .NET CF 1.0 實現了一個XML序列化的類,這個類在 OpenNETCF.Xml.dll 程序集中可以找到。

2. XML 序列化

在 .NET CF 2.0 中使用XML序列化很簡單,跟 .NET Framework 中的一樣。

// XML序列化Customer數組
using (System.IO.MemoryStreamms = new System.IO.MemoryStream())
{
Customer[]customers
= GetCustomers(); // 從數據庫或遠程服務器獲取客戶
System.Xml.Serialization.XmlSerializerser = new System.Xml.Serialization.XmlSerializer( typeof (Customer));
ser.Serialize(ms,customers);

byte []buffer = ms.ToArray();
// 獲取XML文檔的內容
string xml = System.Text.Encoding.ASCII.GetString(buffer, 0 ,buffer.Length);
}

// XML反序列化Customer數組
using (System.IO.MemoryStreamms = new System.IO.MemoryStream(buffer))
{
System.Xml.Serialization.XmlSerializerser
= new System.Xml.Serialization.XmlSerializer( typeof (Customer));
Customer[]customers
= ser.Deserialize(ms) as Customer[];
}


以上示例將對象序列化后,寫入內存流中。你可以換成文件流(FileStream),這樣就可以實現對象的持久化。

3. 二進制序列化

從理論上說,二進制序列化無論是性能還是序列化后的數據流大小都比XML序列化更具優勢,這個我曾經在 《實戰 Web Service 壓縮傳輸》的PPT和Demo 中深入分析過。.NET CF 2.0 并沒有提供二進制序列化的類,如果你想在 .NET CF 2.0 中進行二進制序列化,可以通過第三方的開源組件 CompactFormatter 來實現。我在去年5月份就介紹過 CompactFormatter,詳細請看 讓 .NET Compact Framework 支持 Binnary Serialization 。由于 CompactFormatter 同時支持 .NET CF 和 .NET Framework,我們可以將 CompactFormatter 序列化后的數據流可以轉換為 byte[],并傳輸到服務器后進行反序列化。

今天我簡單介紹一下 CompactFormatter 的使用,用來跟上面的XML序列化進行比較。

為了讓一個實體類能夠被 CompactFormatter 序列化,首先需要將這個實體類加上 [CompactFormatter.Attributes.Serializable()]特性。

[CompactFormatter.Attributes.Serializable()]
public class Customer{
public Customer(){}


}


然后重寫 Equals 方法。

public override bool Equals( object obj)
{
if ( ! obj.GetType().Equals( typeof (Customer)))
{
return false ;
}
else
{
Customeranswer
= (Customer)obj;
return (answer.ID == ID && answer.Name == Name);
}
}


就如上面的代碼中,我將實體類 Customer 加上 [CompactFormatter.Attributes.Serializable()]特性,并重寫了它的 Equals 方法,現在可以使用 CompactFormatter 進行序列化了。

// 二進制序列化Customer數組
using (System.IO.MemoryStreamms = new System.IO.MemoryStream())
{
CompactFormatter.CompactFormatterser
= new CompactFormatter.CompactFormatter();
ser.Serialize(ms,customers);

byte []buffer = ms.ToArray();
}

// 二進制反序列化Customer數組
using (System.IO.MemoryStreamms = new System.IO.MemoryStream(buffer))
{
CompactFormatter.CompactFormatterser
= new CompactFormatter.CompactFormatter();
customers
= ser.Deserialize(ms) as Customer[];
}

4. 序列化示例

為了比較 .NET CF 2.0 下的XML序列化和 CompactFormatter 的二進制序列化,我做了一個示例,可以用它來測試兩種序列化的性能。我會用兩種序列化方法對一個包含1000個 Customer 對象的數組進行序列化和反序列化,并記錄兩種方法各自耗費的時間和序列化后數據流的字節大小。

在 .NET Compact Framework 2.0 中使用序列化

具體操作是在 Visual Studio 2005 中采用調試模式將示例程序部署到 Pocket PC 2003 仿真器(最新的V2版本)中并運行。先執行XML序列化,接著執行XML反序列化,然后退出程序。在調試模式下重新啟動示例程序,先后執行二進制序列化和二進制反序列化。測試結果如下:

XML序列化
字節數:207870
耗時:6秒

XML反序列化
耗時:4秒

二進制序列化
字節數:200867
耗時:3秒

二進制反序列化
耗時:2秒

從測試結果看,CompactFormatter 的二進制序列化速度比XML序列化要快1倍,反序列化也是快1倍。但是序列化后的數據流大小卻相差不多,這點我有點失望。

5. 總結

在現實應用中,CompactFormatter 可以搭配 SharpZipLib 和 WS-Attachment 使用,從而實現低速網絡下(GPRS/CDMA)的高性能數據傳輸。關于 WS-Attachment 的使用可以參考我之前寫的文章 在 Windows Mobile 使用 WS-Attachment 傳輸二進制數據 。我接下來會對 Windows Mobile 下的壓縮組件進行評測,感興趣的朋友請關注我的博客。

示例代碼下載: SerializationMobile.rar

作者:黎波
博客:http://upto.cnblogs.com/
日期:2007年4月20日

本文屬于作者原創,轉載請注明作者和出處,謝謝合作!

在 .NET Compact Framework 2.0 中使用序列化


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕亚洲综合久久男男 | 狠狠干奇米 | 亚洲国产男人本色在线观看的a站 | 欧美艹逼视频 | 福利在线视频观看 | 国产日产久久高清欧美一区 | 亚洲线精品一区二区三区 | 九色视频极品论坛区 | 久久久国产亚洲精品 | 国内精品久久久久久不卡影院 | 免费观看日本污污ww网站一区 | 性成人动作片在线看 | 日本欧美强乱视频在线 | 爱爱毛片 | 亚洲欧美日韩久久精品第一区 | 免费精品99久久国产综合精品 | 97se亚洲国产综合自在线观看 | 国内精品久久影院 | 亚洲h在线观看 | 国产伦精品一区三区视频 | 天天干天天舔天天操 | 91年精品国产福利线观看久久 | 最新日本免费一区二区三区中文 | 亚洲瑟瑟网| 国产在线观看午夜不卡 | 国产在视频线精品视频2021 | 国产成人综合亚洲亚洲欧美 | 爱唯侦察1024入口地址 | 欧美大屁股精品毛片视频 | 中中文字幕亚州无线码 | 国产亚洲精品sese在线播放 | 精品1区2区3区 | 亚洲一级毛片在线观播放 | 热热九九 | 国产精品免费_区二区三区观看 | 成人永久免费视频网站在线观看 | 青青青青久在线观看视频 | 成人夜色视频在线观看网站 | 亚洲国产成人精品久久 | 免费国产小视频在线观看 | 亚洲国产中文字幕在线观看 |