在网络传输和文件操作中,如果数据量很大,需要将其划分为较小的快,此时可能出现一个数据块的末尾是一个不匹配的高代理项,而与其匹配的低代理项在下一个数据块。

这时候使用Encoding的GetBytes方法处理较为麻烦,我们直接使用Encoder处理。

Encoder可以将一组字符编码为一个字节序列。而Decoder可以将已编码的字节序列解码为字符序列。

 

若要获取的实现的实例 Encoder 类,应用程序应使用 GetEncoder 方法 Encoding 实现。

GetByteCount 方法确定多少个字节进行编码的一组 Unicode 字符和 GetBytes 方法执行实际的编码。 这两种方法的几个版本中有 Encoder 类。 有关详细信息,请参阅Encoding.GetBytes。

一个 Encoder 对象之间维护状态信息对连续调用 GetBytes 或 Convert 方法,以便它可以正确编码字符跨块的序列。 Encoder 还保留尾随字符数据块的末尾,并在下一步编码操作中使用尾随字符。

例如,一个数据块的末尾可能不匹配的高代理项,并且匹配的低代理项可能在下一个数据块中。 因此, GetDecoder 和 GetEncoder 在网络传输和文件操作很有用,因为这些操作通常处理的数据而不是完整的数据流块。

 

若要获取的实现的实例 Decoder 类,应用程序应使用 GetDecoder 方法 Encoding 实现。

GetCharCount 方法确定有多少个字符导致个字节的序列进行解码和 GetChars 方法执行实际的解码。 这两种方法的几个版本中有 Decoder 类。 有关详细信息,请参阅Encoding.GetChars。

一个 Decoder 对象之间维护状态信息对连续调用 GetChars 或 Convert 方法,因此它可以正确地对跨块的字节序列进行解码。 Decoder 还保留在数据块的末尾的尾部字节,并在下一步的解码操作中使用的尾随字节。

因此, 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