1. 程式人生 > >使用mina傳遞物件注意問題點以及常見報錯異常處理

使用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)