7. 說(shuō)說(shuō)你對(duì) NIO 的認(rèn)識(shí)?
NIO 的核心就是緩沖區(qū)(Buffer)、通道(Channel)和選擇器(Selector)。
(1). 緩沖區(qū)(Buffer)就是用來(lái)存儲(chǔ)數(shù)據(jù)的,八種基本類型只有 Boolean 類型沒(méi)有提供對(duì)應(yīng)的緩沖區(qū)。
- 核心屬性:capacity,緩沖區(qū)的容量;limit,界線,緩沖區(qū)可用區(qū)域和已用區(qū)域的分界線;position,當(dāng)前的位置。
- 核心方法:allocate,分配緩沖區(qū);put,往緩沖區(qū)寫數(shù)據(jù);get,從緩沖區(qū)讀數(shù)據(jù);
(2). 通道(Channel)就是源位置與目標(biāo)位置之間打開的連接,數(shù)據(jù)傳輸?shù)耐贰?/p>
- 核心實(shí)現(xiàn)類:FileChannel,操作文件的通道;DatagramChannel,通過(guò) UDP 讀取網(wǎng)絡(luò)數(shù)據(jù)的通道;SocketChannel,通過(guò) TCP 讀取網(wǎng)絡(luò)數(shù)據(jù)的通道;ServerSocketChannel,監(jiān)聽(tīng) TCP 連接的通道。
- 核心方法:transferTo/transferFrom,通道間的數(shù)據(jù)傳輸;write,將緩沖區(qū)數(shù)據(jù)寫入通道;read,把通道數(shù)據(jù)讀取到緩沖區(qū)。
(3). 選擇器用于IO多路復(fù)用,將channel都注冊(cè)到選擇器上,它會(huì)監(jiān)聽(tīng)哪些通道有事件發(fā)生,然后進(jìn)行處理。