MINA在处理网络编程问题的时候不失为一个好助手,但使用过程中总会碰到大大小小的问题,最近在使用时便碰到了如此的一个小问题,出现问题的时候查阅源码是个好习惯。
问题
用MINA发送字符串消息的时候,出现了消息过长的问题。1org.apache.mina.common.BufferDataException: Line is too long
消息编码和解码的时候用到了TextLineCodecFactory,其实消息过长的问题出现在了解码的时候。
|
|
当读取到消息结束标识后,剩余的空间不够用,所以抛出异常。
办法
|
|
给decode中每一行的读取长度做了定义,默认是1K,可以按照自己的需要来改动。
多看看
- TextLineCodecFactory中设置decoder的长度
|
|
做了这样的设置之后,每次再读取一行数据的时候就会按照1M的数据量去读。
- MINA中的ProtocolCodecFactory自己有4个实现类,来进行编码处理。
|
|
类名 | 作用 | 备注 |
---|---|---|
TextLineCodecFactory | 文本消息,按行处理,识别回车换行符 | |
DemuxingProtocolCodecFactory | 转送消息到对应CodeFactory | |
PrefixedStringCodecFactory | 处理有固定前缀长度的字符串 | |
ObjectSerializationCodecFactory | Java对象的序列化 | 传输对象必须实现序列化接口,且服务端和客户端包路径必须一致 |
总结
MINA是一个优秀的网络编程辅助工具,但我们不一定能使用到它里面的所有功能,因此应该有选择性的进行学习,以及碰到问题的时候进行适当的源码查阅可以加深我们对于MINA的理解。
其实,不只是针对MINA应该查阅源码,对于很多其他的开源框架或类库,多查阅源码和API总会有好处的。