IO和NIO的區別

區別:線程

IO NIO
面向流 面向緩衝
阻塞IO 非阻塞IO
選擇器

1.面向流和麪向緩衝it

IO是面向流的,NIO是面向緩衝區的;面向流意味着每次從流中讀取一個字節或多個字節,直到讀取完全部的字節,這些字節沒有被緩衝,所以沒法移動流中的數據;而NIO是面向緩衝區的,它把數據讀取到一個稍後處理的緩衝區中,須要時能夠在緩衝區中移動,增長了靈活性;可是須要確保緩衝區中是否包含須要的數據,另外,將新數據寫入緩衝區中時,要確保不會覆蓋還沒有處理的數據。table

2.阻塞IO和非阻塞IOchannel

IO的流是阻塞,意味着當一個線程在調用read和write方法時,什麼都不能幹,只有數據被讀取或者徹底寫入;NIO是非阻塞的,一個線程從通道讀取數據時,僅能夠獲得當前可用的數據,若是沒有數據可用,那麼會繼續執行,而不是阻塞,直到獲取可用數據以前,均可以作其餘事情,線程一般將非阻塞IO的空閒時間用在其它其它通道的IO操做上,因此一個單獨的線程能夠管理多個輸入和輸出通道(channel)。方法

3.選擇器數據

JAVA NIO中的選擇器使得一個線程能夠管理多個通道,能夠註冊多個通道到一個選擇器中,而後使用一個線程來選擇通道;選擇通道中已經有能夠處理的輸入或者輸出。這種選擇機制使得一個線程能夠管理多個通道。tab

相關文章
相關標籤/搜索