Java IO 模型
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iN0EzN4AjM1QTNxImNycDZxYzX3EDOyEDM3AzLcFDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
BIO (Blocking I/O,JDK1.4以前的唯一選擇):同步阻塞I/O模式
一個連接配接一個線程,用戶端有連接配接時服務端就要啟動一個線程進行處理。
NIO (New I/O,JDK1.4開始):同步非阻塞模式
一個線程處理多個請求,用戶端連接配接請求都會注冊到多路複用器,多路複用器輪詢,發現連接配接有IO請求就處理。
這樣可以充分利用線程,某個連接配接空閑時間就切換處理其他連接配接。
AIO (Asynchronous I/O,NIO2,JDK7開始):異步非阻塞I/O模型
還沒有得到廣泛應用。
引入異步通道,采用Proactor模式,簡化程式編寫,有效請求才啟動線程。
先由作業系統完成後才通知服務端啟動線程去處理
适用場景
BIO方式适用于連接配接數目比較小且固定的架構,這種方式對伺服器資源要求比較高,并發局限于應用中。
NIO方式适用于連接配接數目多且連接配接比較短(輕操作)的架構,比如聊天伺服器,并發局限于應用中,程式設計比較複雜。