Java NIO(New IO)是一個(gè)可以替代標(biāo)準(zhǔn)Java IO API的IO API(從Java 1.4開始),Java NIO提供了與標(biāo)準(zhǔn)IO不同的IO工作方式。NIO可以理解為非阻塞IO,傳統(tǒng)的IO的read和write只能阻塞執(zhí)行,線程在讀寫IO期間不能干其他事情,比如調(diào)用socket.read()時(shí),如果服務(wù)器一直沒有數(shù)據(jù)傳輸過來,線程就一直阻塞,而NIO中可以配置socket為非阻塞模式。
Java NIO是在jdk1.4開始使用的,它既可以說成“新I/O”,也可以說成非阻塞式I/O。
下面是java NIO的工作原理:
1.由一個(gè)專門的線程來處理所有的IO事件,并負(fù)責(zé)分發(fā)。
2.事件驅(qū)動(dòng)機(jī)制:事件到的時(shí)候觸發(fā),而不是同步的去監(jiān)視事件。
3.線程通訊:線程之間通過wait,notify等方式通訊。保證每次上下文切換都是有意義的。減少無謂的進(jìn)程切換。
閱讀過一些資料之后,下面貼出我理解的java NIO的工作原理圖:
(注:每個(gè)線程的處理流程大概都是讀取數(shù)據(jù)、解碼、計(jì)算處理、編碼、發(fā)送響應(yīng)。)
Java NIO的服務(wù)端只需啟動(dòng)一個(gè)專門的線程來處理所有的IO事件,這種通信模型是怎么實(shí)現(xiàn)的呢?我們一起來探究它的奧秘吧。java NIO采用了雙向通道(channel)進(jìn)行數(shù)據(jù)傳輸,而不是單向的流(stream),在通道上可以注冊我們感興趣的事件。一共有以下四種事件:
事件名對應(yīng)值
服務(wù)端接收客戶端連接事件 SelectionKey.OP_ACCEPT(16)
客戶端連接服務(wù)端事件 SelectionKey.OP_ConNECT(8)
讀事件 SelectionKey.OP_READ(1)
寫事件 SelectionKey.OP_WRITE(4)
在NIO中有三大核心組件:Channel,Buffer,Selector,傳統(tǒng)的IO面向流的,每次可以從流中讀取一個(gè)或多個(gè)字節(jié),只能向后讀取,不能向前移動(dòng),NIO是面向緩沖區(qū)的,把數(shù)據(jù)讀到一個(gè)緩沖區(qū)中,可以在緩沖區(qū)中向前/向后移動(dòng),增加了程序的靈活性。在NIO中,所有的數(shù)組都需要通過Channel傳輸,通道可以直接將一塊數(shù)據(jù)映射到內(nèi)存中。Channel是雙向的,不僅可以讀取數(shù)據(jù),還能保存數(shù)據(jù),程序不能直接讀寫Channel通道,Channel只與Buffer緩沖區(qū)交互;
如果大家還是不懂,可以看長沙牛耳教育的Java NIO入門教程,此套視頻與大家深入探討了NIO的新特性,并告訴大家如何使用這些特性來提升你所寫代碼的執(zhí)行效率,如何才能充分挖掘新的I/O特性所具備的各種潛能,對程序員所面臨的有代表性的I/O問題也進(jìn)行剖析,本課程采用PDT4J教學(xué)法,通過案例讓大家學(xué)會(huì)如何使用這些功能來解決現(xiàn)實(shí)工作中常常遇到的I/O問題;
本套視頻基本內(nèi)容
1.NIO的新特性
2.如何使用這些特性來提升你所寫代碼的執(zhí)行效率
3.如何才能充分挖掘新的I/O特性所具備的各種潛能
4.剖析程序員所面臨的有代表性的I/O問題
以上就是長沙牛耳教育小編介紹的"最新的免費(fèi)Java NIO實(shí)戰(zhàn)教程發(fā)布",希望對大家有幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為您服務(wù)。