[netty]編程一(基礎(chǔ)概念)

( NIO) 庫 是在 JDK 1. 4 中 引入 的。 NIO 彌補(bǔ) 了 原來 同步 阻塞 I/ O 的 不足, 它在 標(biāo)準(zhǔn) Java 代碼 中 提供 了 高速 的、 面向 塊 的 I/ O。 通過 定義 包含 數(shù)據(jù) 的 類, 以及 通過 以 塊 的 形式 處理 這些 數(shù)據(jù), NIO 不用 使用 本機(jī) 代碼 就可以 利用 低級 優(yōu)化, 這是 原來 的 I/ O 包 所 無法 做到 的。

1.緩沖區(qū)Buffer

Buffer 是一 個 對象, 它 包含 一些 要 寫入 或者 要 讀出 的 數(shù)據(jù)。 在 NIO 類 庫 中 加入 Buffer 對象, 體現(xiàn) 了 新 庫 與 原 I/ O 的 一個 重要 區(qū)別。而在面向流的 I/ O 中, 可以將數(shù)據(jù)直接寫入或者將數(shù)據(jù)直接讀到 Stream 對象中。
在NIO庫中,所有的數(shù)據(jù)都是通過緩存區(qū)處理的。在讀取數(shù)據(jù)時是從緩存中讀?。辉趯懭霐?shù)據(jù)時,寫到緩沖區(qū)中。
緩沖區(qū)實(shí)質(zhì)上是一個數(shù)組。通常它是一個字節(jié)數(shù)組(ByteBuffer),也可以使用其他種類的數(shù)組。但是一個緩沖區(qū)不僅僅是一個數(shù)組,緩沖區(qū)提供了對數(shù)據(jù)的結(jié)構(gòu)化訪問以及維護(hù)讀寫位置(limit)等信息。

ShortBuffer: 短 整型 緩沖區(qū)
IntBuffer: 整形 緩沖區(qū) 
LongBuffer: 長 整形 緩沖區(qū) 
FloatBuffer: 浮點(diǎn) 型 緩沖區(qū) 
DoubleBuffer: 雙 精度 浮點(diǎn) 型 緩沖區(qū)

2.通道 Channel

Channel 是一 個 通道, 可以 通過 它 讀取 和 寫入 數(shù)據(jù), 它 就 像 自來 水管 一樣, 網(wǎng)絡(luò) 數(shù)據(jù) 通過 Channel 讀取 和 寫入。 通道 與 流的 不同 之處 在于 通道 是 雙向 的, 流 只是 在 一個 方向 上 移動( 一個 流 必須 是 InputStream 或者 OutputStream 的 子類), 而且 通道 可以 用于 讀、 寫 或者 同時 用于 讀寫。
Channel是全雙工的

3.多路 復(fù) 用 器 Selector

多路 復(fù) 用 器 Selector, 它是JavaNIO編程基礎(chǔ),熟練掌握 Selector 對于掌握 NIO 編程 至關(guān)重要。 多路復(fù)用器提供選擇已經(jīng)就緒的任務(wù)的能力。 簡單來講 Selector 會 不斷地輪詢注冊在其上的Channel, 如果某個Channel上面有新的TCP連接接入、 讀 和 寫 事件, 這個 Channel 就 處于 就緒 狀態(tài), 會被 Selector 輪 詢 出來, 然后 通過 SelectionKey 可以 獲取 就緒 Channel 的 集合, 進(jìn)行 后續(xù) 的 I/ O 操作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容