首页 > 代码库 > mina变长帧处理
mina变长帧处理
通过mina进行TCP开发,遇到对数据进行解码处理,网上例子基本都是帧长度定长,在doDecode中通过in.remaining()就可以判断得到的数据帧长度为多少,是否能够正常解析,长度不对返回false即可。
但,如果帧是变长的又怎么处理呢?
变长的帧格式一般如下:
说明 | 长度 | 例子 |
标识位 | 1B | 0x01 |
帧长度 | 1B | 0x20 |
帧内容 | 32B | 。。。 |
通过标识位判断是什么类型的帧,再通过帧长度判断帧内容有多长。
因此只有读取了标志位和帧长度才能知道当前处理缓冲区数据够不够分析完整的一帧,实际上关键的问题就是读取数据后怎么恢复缓冲区状态,不影响doDecode的下次分析。
方法就是通过IoBuffer的rewind方法。
代码例子:
protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) { if (in.remaining() < 2) return false; byte flag = in.get(); if (flag != (byte)0x01) return false; byte len = in.get(); if (in.remaining() < len) { in.rewind(); return false; } // 解析操作}
mina变长帧处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。