更新時間:2022-07-25 11:00:01 來源:動力節(jié)點 瀏覽1500次
Java NIO (New IO) 是 Java 的替代 IO API,意味著標(biāo)準(zhǔn) Java IO和Java Networking API 的替代品。Java NIO 提供了與傳統(tǒng) IO API 不同的 IO 編程模型。注意:有時 NIO 被聲稱是指Non-blocking IO。然而,這并不是原本的意思。此外,NIO API 的某些部分實際上是阻塞的——例如文件 API——所以標(biāo)簽“非阻塞”會有點誤導(dǎo)。
Java NIO 使您能夠進行非阻塞 IO。例如,線程可以要求通道將數(shù)據(jù)讀入緩沖區(qū)。當(dāng)通道將數(shù)據(jù)讀入緩沖區(qū)時,線程可以做其他事情。一旦數(shù)據(jù)被讀入緩沖區(qū),線程就可以繼續(xù)處理它。將數(shù)據(jù)寫入通道也是如此。
在標(biāo)準(zhǔn) IO API 中,您使用字節(jié)流和字符流。在 NIO 中,您使用通道和緩沖區(qū)。數(shù)據(jù)總是從通道讀入緩沖區(qū),或從緩沖區(qū)寫入通道。
Java NIO 包含“選擇器”的概念。選擇器是一個對象,可以監(jiān)視多個通道的事件(例如:連接打開、數(shù)據(jù)到達等)。因此,單個線程可以監(jiān)視多個通道的數(shù)據(jù)。
Java NIO 由以下核心組件組成:
頻道
緩沖器
選擇器
Java NIO 有比這些更多的類和組件,但在我看來Channel,Buffer 和Selector構(gòu)成了 API 的核心。其余的組件,例如 Pipe和FileLock只是與三個核心組件一起使用的實用程序類。因此,我將在本 NIO 概述中重點介紹這三個組件。其他組件在本教程其他地方的其自己的文本中進行了解釋。請參閱本頁右上角的菜單。
通常,NIO 中的所有 IO 都以Channel. AChannel有點像流。從Channel數(shù)據(jù)中可以讀入一個Buffer. 數(shù)據(jù)也可以從 aBuffer寫入 a Channel。這是一個例子:
Java NIO:Channels將數(shù)據(jù)讀入Buffers,Buffers將數(shù)據(jù)寫入Channels
有幾種Channel和Buffer類型。Channel以下是Java NIO 中的主要實現(xiàn)列表:
文件頻道
數(shù)據(jù)報頻道
套接字通道
服務(wù)器套接字通道
如您所見,這些通道涵蓋了 UDP + TCP 網(wǎng)絡(luò) IO 和文件 IO。
這些類也有一些有趣的接口,但為了簡單起見,我將把它們排除在 Java NIO 概述之外。在本 Java NIO 教程的其他文本中,將在相關(guān)的地方對它們進行解釋。
Buffer以下是Java NIO 中的核心實現(xiàn)列表:
字節(jié)緩沖區(qū)
字符緩沖區(qū)
雙緩沖
浮動緩沖區(qū)
整數(shù)緩沖區(qū)
長緩沖區(qū)
短緩沖
這些Buffer涵蓋了您可以通過 IO 發(fā)送的基本數(shù)據(jù)類型:byte、short、int、long、float、double 和 characters。
Java NIO 還有一個MappedByteBuffer與內(nèi)存映射文件一起使用的。不過,我將把它Buffer排除在概述之外。
ASelector允許單個線程處理多個Channel's。如果您的應(yīng)用程序打開了許多連接(通道),但每個連接上的流量很低,這會很方便。例如,在聊天服務(wù)器中。
這是使用 aSelector處理 3的線程的圖示Channel:
要使用 a Selector,您可以使用它注冊Channel's。然后你稱之為 select()方法。此方法將阻塞,直到有一個已注冊通道的事件準(zhǔn)備好。一旦方法返回,線程就可以處理這些事件。事件的示例是傳入連接、接收到的數(shù)據(jù)等。
通過上述介紹,相信大家對Java Nio已經(jīng)有所了解,大家如果想了解更多相關(guān)知識,可以關(guān)注一下動力節(jié)點的Java基礎(chǔ)教程,里面有更豐富的知識等著大家去學(xué)習(xí),希望對大家能夠有所幫助。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費 15天面授
有基礎(chǔ) 直達就業(yè)
業(yè)余時間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)
初級 202925
初級 203221
初級 202629
初級 203743