继承mina MessageDecoder 需要重写decodable,decode,finishDecode三个方法,当收到数据包时,程序首先会执行decodable方法,通过读取数据判断当前数据包是否可进行decode,返回MessageDecoderResult.OK表示可以进行decode,在 decodable方法中对IoBuffer进行读取不会影响数据包的大小(在 decode 方法中从头开始decode)。当 decodable方法 返回 MessageDecoderResult.OK ,接着会调用 decode 方法,正式对数据包进行 decode,当数据长度不够,返回MessageDecoderResult.NEED_DATA,下一次会再次调用decode方法。注意,在decode方法进行读取操作,会影响数据包的大小,decode需要判断协议中哪些已经decode完,哪些还没decode。当decode完成后,调用ProtocolDecoderOutput的write进行输出,并返回MessageDecoderResult.OK表示已经decode完成。
具体实现可以参考mina-example中的sumup程序。