最新Java培訓-NIO實戰教程
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。
下面是java NIO的工作原理:
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緩衝區互動;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996644/viewspace-2773912/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java技術分享:NIO實戰教程!Java
- Java培訓教程:Java中的位移運算子!Java
- Java培訓教程之使用Lock取代synchronizedJavasynchronized
- Java培訓教程分享:變數與常量Java變數
- MySQL DBA專案實戰系列培訓課程【MySQL 8.4最新版】MySql
- 大神實戰Web前端最新版培訓視訊教程 專案實戰+基礎入門 Web前端課程 專案篇Web前端
- javaNIO實戰4----> java NIO的通道Channel實戰Java
- Java培訓:長沙Java培訓機構排名Java
- Java培訓教程之JDBC URL結構分析JavaJDBC
- Java培訓教程之物件的建立與使用Java物件
- Java培訓教程之this關鍵字講解Java
- 最新《 java實戰開發俄羅斯方塊教程》Java
- 【譯】Java NIO 簡明教程系列之 NIO 概述Java
- Java培訓教程之使用Jsoup實現簡單的爬蟲技術JavaJS爬蟲
- 長沙Java培訓系列教程之實現CAS單點登入上篇Java
- Java NIO 簡明教程系列Java
- Java NIO系列教程(二) ChannelJava
- Java NIO系列教程(六) SelectorJava
- Java NIO系列教程(七) FileChannelJava
- 【譯】Java NIO 簡明教程系列之 NIO 簡介Java
- java培訓分享:java培訓架構師學習線路圖Java架構
- java培訓教程分享:Java中使用者如何自定義異常?Java
- 2018最新JAVA架構師全套vip培訓(附筆記、原始碼)Java架構筆記原始碼
- Java培訓教程:”==“和 equals 方法究竟有什麼區別?Java
- Java程式設計師技術培訓需要培訓哪些?Java程式設計師
- Python培訓教程分享:“高效實用” 的Python工具庫Python
- java培訓教程分享:Java編寫軟體程式碼自動提示功能Java
- 《深度學習DeepLearning核心技術實戰培訓班》深度學習
- 武漢Java培訓教程之JDBC中的常用介面和類JavaJDBC
- 最新Python教程全套合集專案實戰(完整)Python
- 好程式設計師Java培訓分享Java教程垃圾回收與演算法程式設計師Java演算法
- 長沙Java培訓機構哪家好?怎麼才能避免Java培訓的坑?Java
- 長沙Java培訓:自學Java程式設計有必要報培訓班麼?Java程式設計
- Java培訓都學什麼Java
- java培訓班如何選擇Java
- java培訓面試技巧分享Java面試
- java培訓要學習多久?Java
- Java培訓學些什麼?Java