一,NIO新特性 NIO的一些新特性有:非阻塞I/O,選擇器,緩沖以及管道。管道(Channel),緩沖(Buffer) ,選擇器( Selector)是其主要特征。
二,Channel、Selector解釋 Channel——管道實際上就像傳統IO中的流,到任何目的地(或來自任何地方)的所有數據都必須通過一個 Channel 對象。一個 Buffer 實質上是一個容器對象。 Selector——選擇器用于監聽多個管道的事件,使用傳統的阻塞IO時我們可以方便的知道什么時候可以進行讀寫,而使用非阻塞通道,我們需要一些方法來知道什么時候通道準備好了,選擇器正是為這個需要而誕生的。
三,IO是面向流的,NIO是面向塊(緩沖區) IO面向流的操作一次一個字節地處理數據。一個輸入流產生一個字節的數據,一個輸出流消費一個字節的數據。,導致了數據的讀取和寫入效率不佳; NIO面向塊的操作在一步中產生或者消費一個數據塊。按塊處理數據比按(流式的)字節處理數據要快得多,同時數據讀取到一個它稍后處理的緩沖區,需要時可在緩沖區中前后移動。這就增加了處理過程中的靈活性。通俗來說,NIO采取了“預讀”的方式,當你讀取某一部分數據時,他就會猜測你下一步可能會讀取的數據而預先緩沖下來。
四,IO是阻塞的,NIO是非阻塞的 對于傳統的IO,當一個線程調用read() 或 write()時,該線程被阻塞,直到有一些數據被讀取,或數據完全寫入。該線程在此期間不能再干任何事情了。 而對于NIO,使用一個線程發送讀取數據請求,沒有得到響應之前,線程是空閑的,此時線程可以去執行別的任務,而不是像IO中那樣只能等待響應完成。
五,NIO和IO適用場景 如果需要管理同時打開的成千上萬個連接,這些連接每次只是發送少量的數據,例如聊天服務器,這時候用NIO處理數據可能是個很好的選擇。比如:Netty是一個NIO客戶端、服務端框架。允許快速簡單的開發網絡應用程序。 而如果只有少量的連接,而這些連接每次要發送大量的數據,這時候傳統的IO更合適。使用哪種處理數據,需要在數據的響應等待時間和檢查緩沖區數據的時間上作比較來權衡選擇。






