使用mina傳遞對象注意問題點以及常見報錯異常處理

來源:互聯網
上載者:User

最常見的異常,一個是不能序列化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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.