Netty的深入淺出--84.RepalyingEncode和MessageToMessageDecoder的深入理解及使用

這裏我總結一下,分析源碼主要的是要從宏觀上去了解它的使用,而不是去讀它的源碼,應該更主要的是看它的doc文檔說明,然後在結合着去看它的源碼,這樣才能從一個宏觀的角度去解讀它。

RepalyingEncode是bytemessagedecoder的一個特殊變化,繼承了阻塞IO中的非阻塞解碼器;

它倆最大的區別就是在實現decode()和decodeLast()方法之後不需要檢查是否請求字節可行。

 它是怎麼做的呢

簡單描述:當數據足夠的時候,會執行後面的操作;如果數據不夠的話會拋出錯誤異常

而且該錯誤異常都屬於同一個對象。

對於ReplayingDecoder和ByteToMessageDecoder兩個來說我們已經認識了,那MessageToMessageDecoder呢 ?

數據通過字節從網絡進入到程序,解碼成message,這個時候,從當前處理器到下一個處理器轉換過程就是從message到message的過程,這個時候就要用到MessageToMessageDecoder這個類

查看 MessageToMessageDecoder源碼

這樣的話,我們可以在之前long類型處理之後的基礎上加上該MessageToMessageDecoder處理器,這個消息最後傳遞到我們自定義處理器的時候就是string類型了。

然後將我們自定義處理器接收數據類型改爲string類型

加入解碼器

啓動服務端、客戶端:

 

MessageToMessageCodec既是解碼器又是編碼器

因爲它既實現了出棧處理器又實現了入棧處理器 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章