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:表示解码失败,会抛异常;