Netty 什么是 Codec

2018-08-03 14:34 更新

我們在編寫一個網(wǎng)絡(luò)應(yīng)用程序的時候需要實現(xiàn)某種 codec (編解碼器),有了codec就能夠?qū)⒃甲止?jié)數(shù)據(jù)與目標程序數(shù)據(jù)的格式相互轉(zhuǎn)化。我們知道數(shù)據(jù)在網(wǎng)絡(luò)中的傳播都是以字節(jié)碼的數(shù)據(jù)形式進行的,codec的組成部分有兩個,分別是:decoder(解碼器)和encoder(編碼器)。

編碼器和解碼器將一個字節(jié)序列轉(zhuǎn)換為另一個業(yè)務(wù)對象,那么我們要如何區(qū)分它們呢?

想到一個“消息”是一個結(jié)構(gòu)化的字節(jié)序列,語義為一個特定的應(yīng)用程序——它的“數(shù)據(jù)”。encoder 是組件,轉(zhuǎn)換消息格式適合傳輸(就像字節(jié)流),而相應(yīng)的 decoder 轉(zhuǎn)換傳輸數(shù)據(jù)回到程序的消息格式。邏輯上,“從”消息轉(zhuǎn)換來是當(dāng)作操作 outbound(出站)數(shù)據(jù),而轉(zhuǎn)換“到”消息是處理 inbound(入站)數(shù)據(jù)。

我們看看 Netty 的提供的類實現(xiàn)的 codec 。

解碼器負責(zé)將消息從字節(jié)或其他序列形式轉(zhuǎn)成指定的消息對象,編碼器的功能則相反;解碼器負責(zé)處理“入站”數(shù)據(jù),編碼器負責(zé)處理“出站”數(shù)據(jù)。編碼器和解碼器的結(jié)構(gòu)很簡單,消息被編碼后解碼后會自動通過ReferenceCountUtil.release(message)釋放,如果不想釋放消息可以使用ReferenceCountUtil.retain(message),這將會使引用數(shù)量增加而沒有消息發(fā)布,大多數(shù)時候不需要這么做。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號