Encoder 类:MSDN,将一组字符转换为一个字节序列。
Encoding 类:MSDN,表示字符编码。我知道Decoder是解码器
Encoder和Encoding有什么区别啊?实在搞不懂
Encoder和Encoding都有GetBytes方法,都是将一组字符编码到指定字节数组中请指教啊

解决方案 »

  1.   

    帮助中说的,应该可以理解吧在派生类中重写时,获取一个解码器,该解码器将 Unicode 字符序列转换为已编码的字节序列。
    Encoder..::.GetBytes 方法将连续的字符块转换为连续的字节块,采用的方式类似于该类的 GetBytes 方法。但是,Encoder 在调用之间维护状态信息,因此它可以正确地对跨块的字符序列进行编码。Encoder 还保留数据块结尾的尾部字符并将这些尾部字符用在下一次编码操作中。例如,一个数据块的末尾可能是一个不匹配的高代理项,而与其匹配的低代理项则可能位于下一个数据块中。因此,GetDecoder 和 GetEncoder 在网络传输和文件操作中很有用,这是因为这些操作通常处理数据块而不是完整的数据流。给实现者的说明:默认实现返回一个 Encoder,它调用当前 Encoding 的 GetByteCount 和 GetBytes 方法。您的应用程序必须重写此方法以返回在调用之间维护其状态的 Encoder。
      

  2.   

    你给的MSDN足够说明了两者的关系了,请看这里:
    若要获取 Encoder 类某个实现的实例,应用程序应当使用 Encoding 实现的 GetEncoder 方法。可见,一般不直接使用Encoder 类,而是通过Encoding 来获取具体编码规则的Encoder类,或者直接通过Encoding 类操作,否则你不能控制字符编码。
      

  3.   

    第一两个是不同的class
    不同class中方法是可以重命名的
    new  Encoding().GetBytes();
    new Encoder.GetBytes()虽然方法相同名可参数确不一样 如果一样要这两个一样的方法做什么微软不会写这种没用代码。Encoding还有.UTF8这样的静态 方法来获取指定编码格式字符串转换的BTYE[]
      

  4.   

    是啊,我知道Encoding 来获取具体编码规则的Encoder类实例。http://msdn.microsoft.com/zh-cn/library/system.text.encoding.aspx
    这个地方有这么一截话:
    如果要转换的数据仅存在于连续块(如从流中读取的数据)中,或者如果数据量很大,需要划分为较小的块,则应用程序应当使用由某个派生类的 GetDecoder 方法提供的 Decoder 或由该派生类的 GetEncoder 方法提供的 Encoder。
    请帮忙理解一下这截话,我不太能理解....也许玄机就在这里面
      

  5.   

    请看这里,这是一个派生类的说明,比基类的详细:
    http://msdn.microsoft.com/zh-cn/library/system.text.utf8encoding.getencoder.aspx备注部分说明了它的使用场合,它主要用在不连续的编码或解码中,当数据量过大,或者网络传输中尚未收到全部数据就开始处理是,用这个方法得到Encoder 类或Decoder类,比直接使用Encoding 要好,因为前者维护了数据块结尾的信息,用在下次编码操作中。
      

  6.   

    说得更通俗点,当一个汉字用2个字节表示的时候,你收到9个字节,那么只可能包含4个汉字,最后一个字节只有半个汉字,那么这半个汉字如何处理?这里就需要合并到下次处理过程中。
    对于UTF8编码这种不定长的编码规则是最有意义的,因为不定长编码,结尾处很可能被拆分。
      

  7.   

    Encoder类和Encoding类是不是都可以作为编码器?都可以把所有字符编码为一个字节序列,是吗?
    那........................还是很模糊,
    连续块的编码,就用Encoder类吗?
    什么是连续的块?
      

  8.   

    http://www.cnblogs.com/criedshy/archive/2012/08/08/2628554.html