分享一个自己在用的apache mina的解码器decoder源码

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;


/**
 * 序号 A B C D E
 * 参数名 帧头 包长 数据包内容 CRC 校验 帧尾
 * 类型 BYTE BYTE BYTE BYTE BYTE
 * 字节数 2 2 N 2 2
 * 标志符 0xAA 0xAA 1 7 2 0xEE 0xEE
 *
 */
public class MsgServerDecoder extends CumulativeProtocolDecoder {

	@Override
	protected boolean doDecode(IoSession session, IoBuffer in,
			ProtocolDecoderOutput out) throws Exception {
		
		if(in.remaining() >= 4){
			//缓冲区长度足够截取到协议中的包长度字节
			//标记位置
			in.mark();
			//截取包头
			byte[] msgHeader = new byte[2];
			in.get(msgHeader);
			//截取消息长度
			byte[] msgLen = new byte[2];
			in.get(msgLen);
			int len = Integer.parseInt(((int)msgLen[1]&0xff)+""+((int)msgLen[0]&0xff));
			if(in.remaining()<len+4){
				//报文完整性不够
				in.reset();
				return false;
			}else{
				//解析报文
				//TODO 此处即可根据协议将完整的报文解析成消息对象
				out.write(msg);//msg即是解析完成的消息对象
				return true;
			}
		}
		
		
		return false;
	}

}
上面的示例代码就是一个比较完整的mina的decode代码,代码中用到的协议写在类的注释中,有需要的朋友可以参考;如果代码中有什么错误的地方,希望大家能够帮忙指出,谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L若儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值