這裏我總結一下,分析源碼主要的是要從宏觀上去了解它的使用,而不是去讀它的源碼,應該更主要的是看它的doc文檔說明,然後在結合着去看它的源碼,這樣才能從一個宏觀的角度去解讀它。
RepalyingEncode是bytemessagedecoder的一個特殊變化,繼承了阻塞IO中的非阻塞解碼器;
它倆最大的區別就是在實現decode()和decodeLast()方法之後不需要檢查是否請求字節可行。
它是怎麼做的呢
簡單描述:當數據足夠的時候,會執行後面的操作;如果數據不夠的話會拋出錯誤異常
而且該錯誤異常都屬於同一個對象。
對於ReplayingDecoder和ByteToMessageDecoder兩個來說我們已經認識了,那MessageToMessageDecoder呢 ?
數據通過字節從網絡進入到程序,解碼成message,這個時候,從當前處理器到下一個處理器轉換過程就是從message到message的過程,這個時候就要用到MessageToMessageDecoder這個類
查看 MessageToMessageDecoder源碼
這樣的話,我們可以在之前long類型處理之後的基礎上加上該MessageToMessageDecoder處理器,這個消息最後傳遞到我們自定義處理器的時候就是string類型了。
然後將我們自定義處理器接收數據類型改爲string類型
加入解碼器
啓動服務端、客戶端:
MessageToMessageCodec既是解碼器又是編碼器
因爲它既實現了出棧處理器又實現了入棧處理器