更新時間:2021-05-24 15:09:25 來源:動力節點 瀏覽1878次
Java NIO(New IO)是一個可以替代標準Java IO API的IO API(從Java 1.4開始),Java NIO提供了與標準IO不同的IO工作方式。NIO可以理解為非阻塞IO,傳統的IO的read和write只能阻塞執行,線程在讀寫IO期間不能干其他事情,比如調用socket.read()時,如果服務器一直沒有數據傳輸過來,線程就一直阻塞,而NIO中可以配置socket為非阻塞模式。
Java NIO是在jdk1.4開始使用的,它既可以說成“新I/O”,也可以說成非阻塞式I/O。
1.由一個專門的線程來處理所有的IO事件,并負責分發。
2.事件驅動機制:事件到的時候觸發,而不是同步的去監視事件。
3.線程通訊:線程之間通過wait,notify等方式通訊。保證每次上下文切換都是有意義的。減少無謂的進程切換。
閱讀過一些資料之后,下面貼出我理解的java NIO的工作原理圖:
(注:每個線程的處理流程大概都是讀取數據、解碼、計算處理、編碼、發送響應。)
Java NIO的服務端只需啟動一個專門的線程來處理所有的IO事件,這種通信模型是怎么實現的呢?我們一起來探究它的奧秘吧。java NIO采用了雙向通道(channel)進行數據傳輸,而不是單向的流(stream),在通道上可以注冊我們感興趣的事件。一共有以下四種事件:
服務端接收客戶端連接事件 SelectionKey.OP_ACCEPT(16)
客戶端連接服務端事件 SelectionKey.OP_CONNECT(8)
讀事件 SelectionKey.OP_READ(1)
寫事件 SelectionKey.OP_WRITE(4)
在NIO中有三大核心組件:Channel,Buffer,Selector,傳統的IO面向流的,每次可以從流中讀取一個或多個字節,只能向后讀取,不能向前移動,NIO是面向緩沖區的,把數據讀到一個緩沖區中,可以在緩沖區中向前/向后移動,增加了程序的靈活性。在NIO中,所有的數組都需要通過Channel傳輸,通道可以直接將一塊數據映射到內存中。Channel是雙向的,不僅可以讀取數據,還能保存數據,程序不能直接讀寫Channel通道,Channel只與Buffer緩沖區交互;
如果大家還是不懂,可以看動力節點的Java NIO入門教程,此套視頻與大家深入探討了NIO的新特性,并告訴大家如何使用這些特性來提升你所寫代碼的執行效率,如何才能充分挖掘新的I/O特性所具備的各種潛能,對程序員所面臨的有代表性的I/O問題也進行剖析,本課程采用PDT4J教學法,通過案例讓大家學會如何使用這些功能來解決現實工作中常常遇到的I/O問題;
1.NIO的新特性
2.如何使用這些特性來提升你所寫代碼的執行效率
3.如何才能充分挖掘新的I/O特性所具備的各種潛能
4.剖析程序員所面臨的有代表性的I/O問題
以上就是動力節點小編介紹的"最新的免費Java NIO實戰教程發布",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習