关于mina的java.nio.BufferUnderflowException

最近在使用mina做一个同步,在开发调试过程中总是会出现java.nio.BufferUnderflowException 确实是很郁闷啊,没办法,百度一下,一开始看到这篇文章http://my.oschina.net/javagg/blog/2,但是发现和我情况是不一样的,我是每个数据包几乎大小不会相差很大。那么还有什么问题呢?



接着找,发现有人说需要设置这个东西。

acceptor.getSessionConfig().setReadBufferSize(256);
acceptor.getSessionConfig().setReceiveBufferSize(256);

我肯定也尝试了一下,试着把这个值调大一点

acceptor.getSessionConfig().setReadBufferSize(102400);
acceptor.getSessionConfig().setReceiveBufferSize(102400);

咦,好像真的没有报underflow了,BUT,过了一会后问题还是出现了,那么肯定也不是解决办法。


接下来就是真正的办法了...  啰嗦一点。。。


解决的核心在于CumulativeProtocolDecoder


  1. 需要一个ProtocolCodecFactory拦截数据包解
public class CharsetCodecFactory implements ProtocolCodecFactory {

	@Override
	public ProtocolDecoder getDecoder(IoSession session) throws Exception {
		return new CharsetDecoder();
	}

	@Override
	public ProtocolEncoder getEncoder(IoSession session) throws Exception {
		return new CharsetEncoder();
	}
}

2.然后在启动时的chain里注册
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值