使用mina传递对象注意问题点以及常见报错异常处理

最常见的异常,一个是不能序列化java.io.NotSerializableException:,另一个就是java.io.InvalidClassException,还有java.nio.charset.MalformedInputException

1. 首先是客户端和服务端的过滤器要一致,此问题容易导致异常:java.nio.charset.MalformedInputException

          

//创建接受数据的过滤器
        DefaultIoFilterChainBuilder chain = connector.getFilterChain();

        //设定这个过滤器将一行一行(/r/n)的读取数据
        //chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));//这个是传递字符串用的解码器,屏蔽掉
        chain.addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));//这个才是mina传递对象的解码器


 

2. 要传递的对象在客户端和服务端要传递的类都要实现接口java.io.Serializable;  如果这个对象内部引用了其他类,那么这个“其他类”也是要实现java.io.Serializable接口的,否则容易产生java.io.NotSerializableException:

public class User implements Serializable {...}


3. 传递的对象所在的包(没错,例如User类在服务端和客户端下都应处于package com.test;之下)、且类名等最好一致,否则可能出现如下异常:

package com.test;

org.apache.mina.filter.codec.ProtocolDecoderException: org.apache.mina.core.buffer.BufferDataException: java.io.InvalidClassException: failed to read class descriptor (Hexdump: 00 00 00 3C AC ED 00 05 73 72 01 00 1C 63 6F 6D 2E 65 78 61 6D 70 6C 65 2E 63 63 74 76 2E 50 61 63 6B 4D 65 73 73 61 67 65 78 70 74 00 12 E4 B8 AD E6 96 87 E6 B5 8B E8 AF 95 E3 80 82 E3 80 81)



猜你喜欢

转载自blog.csdn.net/juyangjia/article/details/9240445
今日推荐