以BIO形式的文件讀取和復制:
NIO讀取過程:
NIO形式的讀取和復制
阻塞IO和非阻塞IO這兩個概念是程序級別的。主要描述的是程序請求操作系統(tǒng)IO操作后,如果IO資源沒有準備好,那么程序該如何處理的問題:前者等待;后者繼續(xù)執(zhí)行(并且使用線程一直輪詢,直到有IO資源準備好了)。
同步IO和異步 IO,這兩個概念是操作系統(tǒng)級別的。主要描述的是操作系統(tǒng)在收到程序請求IO操作后,如果IO資源沒有準備好,該如何響應程序的問題:前者不響應,直到IO資源準備好以后;后者返回一個標記(好讓程序和自己知道以后的數(shù)據(jù)往哪里通知),當IO資源準備好以后,再用事件機制返回給程序。
同步阻塞IO(JAVABIO):
服務器實現(xiàn)模式為一個連接一個線程,每當客戶端有連接請求時服務器端就需要啟動一個線程進行處理。而且服務器需要一直處于等待狀態(tài),一直在 accept();。如果這個連接不做任何事會造成不必要的開銷。
同步非阻塞IO(JavaNIO):
服務器實現(xiàn)模式為一個請求一個線程,即客戶端發(fā)送的連接請求都會注冊到多路復用器上,多路復用器輪詢到連接有I/O請求時才啟動一個線程進行處理。用戶進程也需要時不時的詢問IO操作是否就緒,這就要求用戶進程不停的去詢問。
異步阻塞IO(JavaNIO):
此種方式下是指應用發(fā)起一個IO操作以后,不等待內(nèi)核IO操作的完成,等內(nèi)核完成IO操作以后會通知應用程序,這其實就是同步和異步最關(guān)鍵的區(qū)別,同步必須等待或者主動的去詢問IO是否完成。(比如你買了一份快遞,你不需要一天二十四小時去關(guān)注快遞的狀態(tài),而是當快遞到了或丟了等特殊情況下會通知你。)
阻塞是因為此時是通過select系統(tǒng)調(diào)用來完成的,而select函數(shù)本身的實現(xiàn)方式是阻塞的,而采用select函數(shù)有個好處就是它可以同時監(jiān)聽多個文件句柄從而提高系統(tǒng)的并發(fā)性!
還有更強的異步非阻塞(AIO)。
以上就是長沙中公優(yōu)就業(yè)java培訓機構(gòu)的小編針對“編程基礎(chǔ)學習,用Java io流讀取文件”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。