第十四章 字符、字符串、編碼

 

一、字符:.NET FrameWork中字符總是表示成16位的 Unicode值。

 二、字符和數字轉化有三種方式 直接轉化、Convert、IConvertible

 

三、字符串: string  存在於堆上屬於引用類型。

字符串拼接建議使用 StringBuilder,因爲每次+號拼接會產生額外的內存開銷,產生新的字符串。

四、字符串比較:

StringComparison.Ordinal 效率較高,先看字符數數量相等的話纔開始比較,否則直接返回false ,這是忽略語言環境的前提下。

System.StringComparer:適合大量字符串,反覆執行同一比較。具體機制沒有研究。

 

五、字符串留用:簡單的說就是爲了節省內存消耗,共享字符串。原理是 一個Hash表,表中是一個個字符串,單是實際內存是在堆上。Hash特性 key的唯一性。達到了共享。

 

六、字符串池:編譯源碼時候將單個字符串多個實例合併成一個。在編譯字符串源碼插入到元數據時候。元數據中該字符串的引用被修改爲,引用同一個字符串實例(就剛被合併過後的那個實例)。這種技術叫做字符串池。而不是和線程池中線城池一樣的概念。

 

七、字符串編碼: 字節在傳輸過程中需要編碼,響應的接收方需要解碼。爲了安全、信息不丟失、等等就要編碼解碼。

抽象類Encoding有個靜態屬性GetEncoding 靜態屬性是全局的公用的因此不會構建額外的對象,可以減少GC壓力,首選該屬性。

           Encoding.GetEncoding("abc");

           System.Text.UnicodeEncoding.GetEncoding("abv");//繼承自 抽象類 Encoding

         System.Text.UTF8Encoding.GetEncoding("abv");//繼承自 抽象類 Encoding

因此後面的兩個是抽象類Encoding的派生類,會產生額外的對象

 

八、字節流編碼:System.Net.Sockets.NetworkStream 的編碼方式2種方案第一種上面的Encoding來編碼,單是Encoding方式獲取字節流時候需要是 2的倍數。因此還要利用獲取數量的方式然後處理最末尾的字節流是否是2的倍數。因此有一個簡單的方式就是Base64:他用System.Convert的靜態方法來實施解碼編碼。

 

 

九、安全字符串:System.Security.SecureString 用法如下

 

 

 

他是在非託管內存中的加密字符串。僅僅在你調用她的 幾個屬性時候才處於未加密狀態,

AppendCahr、InSertAt、RemovAt、SetAt時候。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章