[2016/9/16]Apache Mina的TextLine换行符问题与解决

  • 2016-09-17
  • 0
  • 0

嗨呀,因为某个原因,不得不去写一个JAVA版本的服务器端,最后选用了Apache Mina这个框架,但是在使用它自带的TextLine编码过滤器的时候,却出现了一个很尴尬的问题,之前在客户端的数据定义上,并没有添加\n作为结束,然而在TextLine里面,没有\n的话它处理的时候会认为数据没有结束而进入等待,现在再去修改数据定义明显不是一个明智的选择。。。最后,发现Mina的过滤器机制是顺序过滤的,所以最后选择在编码解码器上加上一个过滤器,专门用于数据末尾添加\n,来解决这个问题。

代码很简单。

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.filterchain.IoFilterAdapter;
import org.apache.mina.core.session.IoSession;

/**
 * Created by lzq on 2016/9/16.
 */
public class RecvFilter extends IoFilterAdapter {
    public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception {
        if (!(message instanceof IoBuffer)) {
            nextFilter.messageReceived(session, message);
        } else {
            IoBuffer in = (IoBuffer) message;
            in.setAutoExpand(true);//设置自动扩展
            in.position(in.limit());
            in.put((byte)'\n');
            in.position(0);
            nextFilter.messageReceived(session, in);
        }
    }
}

评论

还没有任何评论,你来说两句吧