目錄
NIO(一、概述)
NIO(二、Buffer)
NIO(三、Channel)
Channel
上文說了描述了Buffer的實(shí)現(xiàn)機(jī)制,那么這個(gè)章節(jié)就主要描述數(shù)據(jù)是如何進(jìn)入緩沖區(qū)的,并且又是如何從緩沖區(qū)流出的。
類圖縱覽及核心類概述
這張圖只是簡(jiǎn)單概括了Channel的類圖,當(dāng)然,Channel的設(shè)計(jì)遠(yuǎn)比這個(gè)更復(fù)雜:例如SelectableChannel還有SocketChannel和ServerSocketChannel的實(shí)現(xiàn),NetworkChannel繼承Channel并抽象了更多的方法;例如FileChannel,除了繼承AbstractInterruptibleChannel之外,還實(shí)現(xiàn)了GatheringByteChannel和ScatteringByteChannel接口。
Channel
我們可以看到,Channel接口本身定義了 close() 和 isOpen() 方法,在繼承Channel的接口中,又分別抽象了讀通道(ReadableByteChannel)、寫通道(WritableByteChannel)及可中斷的異步通道(InterruptibleChannel)接口。讀寫通道自然不必說,下文也會(huì)有介紹。InterruptibleChannel
這里說下InterruptibleChannel,這是一個(gè)可以被中斷的異步通道,繼承了 close() 方法。當(dāng)一個(gè)線程在I/O被阻塞時(shí),另一個(gè)線程執(zhí)行了close()方法,那么阻塞的線程會(huì)拋出&nb