MessageDecoderAdapter

ecoder 中调用。

D. 在 DemuxingProtocolCodecFactory 中调用addMessageEncoder()、addMessageDecoder()

方法组装编解码器。

MessageEncoder的接口如下所示:

public interface MessageEncoder<T> {

void encode(IoSession session, T message, ProtocolEncoderOutput out)

throws Exception;

}

你注意到消息编码器接口与在ProtocolEncoder 中没什么不同,区别就是Object message

被泛型具体化了类型,你不需要手动的类型转换了。

MessageDecoder的接口如下所示:

public interface MessageDecoder {

static MessageDecoderResult OK = MessageDecoderResult.OK;

static MessageDecoderResult NEED_DATA =

MessageDecoderResult.NEED_DATA;

static MessageDecoderResult NOT_OK = MessageDecoderResult.NOT_OK;

MessageDecoderResult decodable(IoSession session, IoBuffer in);

MessageDecoderResult decode(IoSession session, IoBuffer in,

ProtocolDecoderOutput out) throws Exception;

void finishDecode(IoSession session, ProtocolDecoderOutput out)

throws Exception;

}

(1.)decodable()方法有三个返回值,分别表示如下的含义:

A. MessageDecoderResult.NOT_OK:表示这个解码器不适合解码数据,然后检查其它解码

器,如果都不满足会抛异常;

B. MessageDecoderResult.NEED_DATA:表示当前的读入的数据不够判断是否能够使用这

个解码器解码,然后再次调用decodable()方法检查其它解码器,如果都是NEED_DATA,

则等待下次输入;

C. MessageDecoderResult.OK: 表示这个解码器可以解码读入的数据, 然后则调用

MessageDecoder 的decode()方法。

这里注意decodable()方法对参数IoBuffer in 的任何操作在方法结束之后,都会复原,也就是

你不必担心在调用decode()方法时,position 已经不在缓冲区的起始位置。这个方法相当于

是预读取,用于判断是否是可用的解码器。

(2.)decode()方法有三个返回值,分别表示如下的含义:

A. MessageDecoderResult.NOT_OK:表示解码失败,会抛异常;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值