最近在使用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
- 需要一个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里注册