C#序列化和轉碼

來源:互聯網
上載者:User

首先 我們寫兩個代碼

 

1.byte[] q=  System.Text.Encoding.UTF8.GetBytes("哈");

2.
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, "哈");
stream.Close();
byte[] qq=stream.ToArray();

第一個方法是把"哈"字串轉換成UTF8碼,第二個是序列化"哈"

不同之處在於

一.

1是單純的轉碼

2是序列化"哈"這個字串對象,一個對象包括很對內容(屬性,方法,索引器等等)

序列化對象就是把對象變成byte[]的格式,因為對象的成員很複雜,而且類型不同,所以變起來沒有轉碼那麼簡單

二.

我們會發現,2並沒有指定編碼格式,難道序列化就不需要指定編碼格式嗎,那當然是不可能的,通過我實驗當序列化對象時,把對象中資料成員的字串轉化為byte[]是按照UTF8碼來做的,其它類型我沒有實驗

 

那為什麼要用UTF8而不用Unicode?

看一下 下面的解釋

 UTF8效率
  1.每個英文字母、數字所佔的空間為1 Byte;
  2.泛歐語系、斯拉夫語字母佔2 Bytes;
  3.漢字佔3 Bytes。
用Unicode的話,英文也變成2 Bytes了
原來老美是為了照顧自己 而損失了漢語的效率,明白了了吧

由此可見UTF8對英文來說是個非常誘人的方案,但對中文來說則不太合算,無論用ANSI還是 Unicode/UCS2來編碼都只用2 Bytes,但用UTF8則需要3 Bytes。
  以下是一些統計資料,顯示用UTF8來儲存檔案每個字元所需的平均位元組:
  1.拉丁語系平均用1.1 Bytes;
  2.希臘文、俄文、阿拉伯文和希伯萊文平均用1.7 Bytes;
  3.其他大部份文字如中文、日文、韓文、Hindi(北印度語)用約3 Bytes;
  4.用超過4 Bytes的都是些非常少用的文字元號。

 

一開始我用序列化的時候,我就很奇怪,為什麼不用指定編碼,原來不是沒指定,而是序列化對象自身已經做好了演算法,(有可能針對不同類型用了很多不同的編碼,自訂很複雜,失去了意義,系統指定的最佳化編碼)並沒有提供給外接指定編碼的介面(可以自訂序列化,但不知道可不可以自訂序列化編碼)

一家之言,不敢肯定是正確的,作為參考吧

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.