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