Mina常见异常

来源:互联网 发布:天猫秒杀软件哪个好 编辑:程序博客网 时间:2024/05/01 05:41

1.MINA传递大文本时, 会出现异常: org.apache.mina.common.BufferDataException: Line is too long: 1531

原因是MINA设置的行解码器长度太小,默认的才1024,必须增大其长度; 代码如下.
TextLineCodecFactory lineCodec=new TextLineCodecFactory(Charset.forName("UTF-8")); 

Java代码

// 协议解析,采用mina现成的UTF-8字符串处理方式              TextLineCodecFactory lineCodec = new TextLineCodecFactory(Charset.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(), LineDelimiter.WINDOWS.getValue());lineCodec.setDecoderMaxLineLength(1024*1024); //1M  lineCodec.setEncoderMaxLineLength(1024*1024); //1M  acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(lineCodec));  //行文本解析   acceptor.getFilterChain().addLast("log",new LoggingFilter()); //日志拦截  

2. MINA过滤器的使用须知

2.1 TextLineCodecFactory设置这个过滤器一行一行(/r/n)的发送/读取数据2.2 ObjectSerializationCodecFactory一般发送/接收的是对象等形象,以对象形式读取***2.3 测试之中发现, 无法通过MINA框架与普通tcp直接对象序列化传递, 跟踪发现MINA对object进行了封装(加入了报文头), 无法让普通tcp进行序列化, 只有应用MINA框架才能反序列化构建对象***

这两天在项目中遇到个问题:
java服务端用mina发送接收数据,android客户端也用的mina,但是ios不是,以至于在后面的一些改动中出现错误始终没办法解决。
异常信息:
这里写图片描述
这个错误的本质是服务器端跟客户端的字符结束符不一致,解析方式不一样造成的。
一般通用的socket解析方式的字符结束符都是以/r/n 结束的,但ObjectSerializationCodecFactory不是,所以最后只能改成TextLineCodecFactory来使用,故遵循了上面2.3的解释,只有应用mina框架才能反序列化构建对象,因为才知道了问题的根本原因所以。
参考:(http://tcspecial.iteye.com/blog/1545452)

0 0