任何事物的發展都是由不完善到更好的方向發展的,至於能不能發展到完善,我這裏能夠負責任的說:是不能的,由於隨着時代的發展,任何過去時的研究成功不能總知足當下或未來的情況。這就像咱們碼農的 命運同樣,昨天咱們學習了Struts、hibernate等技術,幾年後被Spring mvc、mybatis取代的時候,咱們還要趕忙學習這些框架,誰也不知道明天會不會有個新的框架出來再取而代之。只有不斷學習纔不會被這個時代拋棄。java
IO的發展也相似,起初(jdk1.4以前)IO提供了字節流和字符流,但設計都是線程阻塞的,效率很是低下,jdk1.4開始對IO進行了改革,推出了同步非阻塞IO, 提供了 Channel、Selector、Buffer新的抽象,讀寫效率獲得了提升。2011年,jdk1.7發佈,AIO的出現,標誌着IO的操做又進入一個新階段。mybatis
BIO(Blocking I/O):同步阻塞IO模式,數據讀取或寫入必須阻塞在一個線程內完成。 【如下摘自知乎:在此種方式下,用戶進程在發起一個 IO 操做之後,必須等待 IO 操做的完成,只有當真正完成了 IO 操做之後,用戶進程才能運行。 】mvc
NIO(New I/O):支持同步阻塞和非阻塞IO模式。同步非阻塞:【如下摘自知乎: 在此種方式下,用戶進程發起一個 IO 操做之後 邊可 返回作其它事情,可是用戶進程須要時不時的詢問 IO 操做是否就緒,這就要求用戶進程不停的去詢問,從而引入沒必要要的 CPU 資源浪費。 】框架
AIO( Asynchronous I/O ): 異步非阻塞I/O模型(知乎中有人說java實現的不是異步非阻塞,而是異步阻塞,這裏須要進一步考證)。 異步 IO 是基於事件和回調機制實現的,也就是應用操做以後會直接返回,不會阻塞在那裏,當後臺處理完成,操做系統會通知相應的線程進行後續的操做。異步
因爲今天時間的問題,先整理這部份內容。後序會用實例說明每一種模式的操做方式。學習