這篇文章主要講解了“java中NIO的用法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java中NIO的用法”吧!
雙遼網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
Linux系統(tǒng)中的IO操作內(nèi)部相當復(fù)雜,下面是一張帶圖片的LinuxIO相關(guān)層級關(guān)系:
下面是一個簡化版本Linux內(nèi)部IO層級圖:
對此我的理解,java程序員版本的IO理解:
從最早bio的只支持阻塞的bio(同步阻塞)
到默認阻塞支持非阻塞nio(同步非阻塞+同步阻塞)
再到aio(異步非阻塞)
FileChannel:從文件讀取數(shù)據(jù)的
DatagramChannel:讀寫UDP網(wǎng)絡(luò)協(xié)議數(shù)據(jù)
SocketChannel:讀寫TCP網(wǎng)絡(luò)協(xié)議數(shù)據(jù)
ServerSocketChannel:可以監(jiān)聽TCP連接
示例代碼: socket https://github.com/victorsheng/verification-everything/tree/master/io/src/main/java/socket/nio file https://github.com/victorsheng/verification-everything/tree/master/io/src/main/java/file/nio
示例代碼: socket https://github.com/victorsheng/verification-everything/tree/master/io/src/main/java/socket/aio file https://github.com/victorsheng/verification-everything/tree/master/io/src/main/java/file/aio
作為jdk的基礎(chǔ)類庫,被很多應(yīng)用使用了,此處列舉了幾個常見的
http://tomcat.apache.org/tomcat-9.0-doc/config/http.html#Connector_Comparison
Prior to Jetty 9, the type of the connector reflected both the protocol supported (HTTP, HTTPS, AJP, SPDY), and the nature of the implementation (NIO or BIO). From Jetty 9 onwards there is only one prime Connector type (ServerConnector), which is NIO based and uses Connection Factories to handle one or more protocols.
https://www.eclipse.org/jetty/documentation/9.4.x/quickstart-config-what.html#intro-jetty-configuration-connectors
作為nio最常用的封裝類庫
nio更多解決的是線程資源的浪費,而非單個操作響應(yīng)時間的提升
使用NIO != 高性能,當連接數(shù)<1000,并發(fā)程度不高或者局域網(wǎng)環(huán)境下NIO并沒有顯著的性能優(yōu)勢。
NIO并沒有完全屏蔽平臺差異,它仍然是基于各個操作系統(tǒng)的I/O系統(tǒng)實現(xiàn)的,差異仍然存在。使用NIO做網(wǎng)絡(luò)編程構(gòu)建事件驅(qū)動模型并不容易,陷阱重重。 推薦大家使用成熟的NIO框架,如Netty,MINA等。解決了很多NIO的陷阱,并屏蔽了操作系統(tǒng)的差異,有較好的性能和編程模型。
感謝各位的閱讀,以上就是“java中NIO的用法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對java中NIO的用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!