Java NIO與IO的詳細區別(通俗篇)


就速度來說 CPU > 內存 > 硬盤

 

  • I- 就是從硬盤到內存
  • O- 就是從內存到硬盤

第一種方式:我從硬盤讀取數據,然后程序一直等,數據讀完后,繼續操作。這種方式是最簡單的,叫阻塞IO

 

第二種方式:我從硬盤讀取數據,然后程序繼續向下執行,等數據讀取完后,通知當前程序(對硬件來說叫中斷,對程序來說叫回調),然后此程序可以立即處理數據,也可以執行完當前操作在讀取數據。

 

在以前的 Java IO 中,都是阻塞式 IO,NIO 引入了非阻塞式 IO。

 

還有一種就是同步 IO 和異步 IO。經常說的一個術語就是“異步非阻塞”,好象異步和非阻塞是同一回事,這大概是一個誤區吧。

 

至於 Java NIO 的 Selector,在舊的 Java IO 系統中,是基於 Stream 的,即“流”,流式 IO。

 

當程序從硬盤往內存讀取數據的時候,操作系統使用了 2 個“小伎倆”來提高性能,那就是預讀,如果我讀取了第一扇區的第三磁道的內容,那么你很有可能也會使用第二磁道和第四磁道的內容,所以操作系統會把附近磁道的內容提前讀取出來,放在內存中,緩存

 

(PS:以上過程簡化了)

 

通過上面可以看到,操作系統是按塊 Block從硬盤拿數據,就如同一個大臉盆,一下子就放入了一盆水。但是,當 Java 使用的時候,舊的 IO 確實基於 流 Stream的,也就是雖然操作系統給我了一臉盆水,但是我得用吸管慢慢喝。

 

於是,NIO 橫空出世。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM