在網絡傳輸和文件操做中,若是數據量很大,須要將其劃分爲較小的快,此時可能出現一個數據塊的末尾是一個不匹配的高代理項,而與其匹配的低代理項在下一個數據塊。數組
這時候使用Encoding的GetBytes方法處理較爲麻煩,咱們直接使用Encoder處理。網絡
Encoder能夠將一組字符編碼爲一個字節序列。而Decoder能夠將已編碼的字節序列解碼爲字符序列。app
若要獲取的實現的實例 Encoder 類,應用程序應使用 GetEncoder 方法 Encoding 實現。ui
GetByteCount 方法肯定多少個字節進行編碼的一組 Unicode 字符和 GetBytes 方法執行實際的編碼。 這兩種方法的幾個版本中有 Encoder 類。 有關詳細信息,請參閱Encoding.GetBytes。編碼
一個 Encoder 對象之間維護狀態信息對連續調用 GetBytes 或 Convert 方法,以便它能夠正確編碼字符跨塊的序列。 Encoder 還保留尾隨字符數據塊的末尾,並在下一步編碼操做中使用尾隨字符。spa
例如,一個數據塊的末尾可能不匹配的高代理項,而且匹配的低代理項可能在下一個數據塊中。 所以, GetDecoder 和 GetEncoder 在網絡傳輸和文件操做頗有用,由於這些操做一般處理的數據而不是完整的數據流塊。3d
若要獲取的實現的實例 Decoder 類,應用程序應使用 GetDecoder 方法 Encoding 實現。代理
GetCharCount 方法肯定有多少個字符致使個字節的序列進行解碼和 GetChars 方法執行實際的解碼。 這兩種方法的幾個版本中有 Decoder 類。 有關詳細信息,請參閱Encoding.GetChars。 code
一個 Decoder 對象之間維護狀態信息對連續調用 GetChars 或 Convert 方法,所以它能夠正確地對跨塊的字節序列進行解碼。 Decoder 還保留在數據塊的末尾的尾部字節,並在下一步的解碼操做中使用的尾隨字節。 orm
所以, GetDecoder 和 GetEncoder 很是有用的網絡傳輸和文件操做,由於這些操做一般處理的數據而不是完整的數據流塊。
1 string str = "在下阪本,有何貴幹@@"; 2 Char[] chars = str.ToCharArray(); 3 Debug.Log("String="+new string(chars)); 4 //得到Encoder實例; 5 Encoder encoder = Encoding.UTF8.GetEncoder(); 6 //計算字符序列化須要的字節數組長度; 7 byte[] bytes = new byte[encoder.GetByteCount(chars,0,chars.Length,true)]; 8 //經過GetBytes轉爲字節序列; 9 encoder.GetBytes(chars, 0, chars.Length, bytes, 0, true); 10 Debug.Log(BitConverter.ToString(bytes)); 11 Debug.Log("Encoding.UTF8.GetString=" + Encoding.UTF8.GetString(bytes)); 12 //得到Decoder實例; 13 Decoder decoder = Encoding.UTF8.GetDecoder(); 14 //計算字節數組對應的字符數組長度; 15 int charSize = decoder.GetCharCount(bytes, 0, bytes.Length); 16 Char[] chs = new char[charSize]; 17 //進行字符轉換; 18 int charLength = decoder.GetChars(bytes, 0, bytes.Length, chs, 0); 19 Debug.Log("Decoder Bytes to String =" + new string(chs));
//output:
MSDN Encoder >>> https://msdn.microsoft.com/zh-cn/library/system.text.encoder%28v=vs.110%29.aspx
MSDN Decoder >>> https://msdn.microsoft.com/zh-cn/library/system.text.decoder%28v=vs.110%29.aspx