Java NIO 概述

Java NIO 主要包括一下核心組件:

  • Channels
  • Buffers
  • Selectors

Java NIO的類(lèi)遠(yuǎn)不止這些,但是Channel,Buffer和Selector構(gòu)成了API的核心。其他組件,如Pipe和FileLock,僅僅是與三個(gè)核心組件結(jié)合使用的實(shí)用工具類(lèi)。 因此,我將在本節(jié)NIO概述中關(guān)注這三個(gè)組件。

Channels and Buffers
通常,NIO中的所有IO都以一個(gè)通道開(kāi)始。 通道有點(diǎn)像流。 在通道中,數(shù)據(jù)可以被讀入緩沖區(qū)。 數(shù)據(jù)也可以從緩沖區(qū)寫(xiě)入通道。 這是一個(gè)例子:

通道將數(shù)據(jù)讀入緩沖區(qū),緩沖區(qū)將數(shù)據(jù)寫(xiě)入通道

有幾種通道和緩沖類(lèi)型。以下是Java NIO中通道的實(shí)現(xiàn)類(lèi)列表:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

這些通道涵蓋UDP + TCP網(wǎng)絡(luò)IO和文件IO的處理。

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

這些Buffer覆蓋了可以通過(guò)IO發(fā)送的基本數(shù)據(jù)類(lèi)型:byte,short,int,long,float,double和characters。Java NIO也有一個(gè)與內(nèi)存映射文件結(jié)合使用的MappedByteBuffer。

Selectors
Selectors允許單個(gè)線程處理多個(gè)Channel。如果你的應(yīng)用程序有許多通道代開(kāi),但是每個(gè)連接流量都很低,那么Selecttor會(huì)給你帶來(lái)便利。例如:聊天服務(wù)器。

下面是一個(gè)使用Selector處理3個(gè)Channel的線程的例子:


一個(gè)線程利用Selector處理3個(gè)Channel

要使用Selector,你必須注冊(cè)Channel到這個(gè)Selector。然后調(diào)用select()方法,這個(gè)方法會(huì)阻塞直到有事件(數(shù)據(jù)讀取,連接建立)已經(jīng)準(zhǔn)備好。一旦該方法返回,該線程就可以處理這個(gè)事件。

上一節(jié):Java NIO 教程
下一節(jié):Java NIO Channel


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

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

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