这里我总结一下,分析源码主要的是要从宏观上去了解它的使用,而不是去读它的源码,应该更主要的是看它的doc文档说明,然后在结合着去看它的源码,这样才能从一个宏观的角度去解读它。

RepalyingEncode是bytemessagedecoder的一个特殊变化,继承了阻塞IO中的非阻塞解码器;

它俩最大的区别就是在实现decode()和decodeLast()方法之后不需要检查是否请求字节可行。

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

 它是怎么做的呢

简单描述:当数据足够的时候,会执行后面的操作;如果数据不够的话会抛出错误异常

而且该错误异常都属于同一个对象。

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

对于ReplayingDecoder和ByteToMessageDecoder两个来说我们已经认识了,那MessageToMessageDecoder呢 ?

数据通过字节从网络进入到程序,解码成message,这个时候,从当前处理器到下一个处理器转换过程就是从message到message的过程,这个时候就要用到MessageToMessageDecoder这个类

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

查看 MessageToMessageDecoder源码

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

这样的话,我们可以在之前long类型处理之后的基础上加上该MessageToMessageDecoder处理器,这个消息最后传递到我们自定义处理器的时候就是string类型了。

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

然后将我们自定义处理器接收数据类型改为string类型

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

加入解码器

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

启动服务端、客户端:

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

 Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

MessageToMessageCodec既是解码器又是编码器

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

因为它既实现了出栈处理器又实现了入栈处理器 

Netty的深入浅出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

 

相关文章: