Java IO
BIO:Block-IO,同步且阻塞
Block-IO
是一種同步且阻塞的通信模式。是一個比較傳統的通信方式,模式簡單,使用方便。但併發處理能力低,依賴網速。
NIO:Non-Block-IO,同步非阻塞
Java SE1.4
版以後,針對網絡傳輸效能優化的新功能。
AIO:Asynchronous-IO,異步非阻塞
在
NIO
的基礎上引入了新的異步通信概念,並提供了異步文件通道和異步套接字通道實現。
區別
AIO
原來的IO
有同樣的作用和目的,他們之間重要的區別是數據打包和傳輸的方式。原來的IO
以流的方式處理數據,而NIO
以塊的方式處理數據。
面向流的
IO
系統一次一個字節地處理數據。一個輸入流產生一個字節的數據,一個輸出流消費一個字節數據。
面向塊的
IO
以塊的形式處理數據,每一個操作都在一步中產生或者消費一個塊。按塊處理數據比字節處理數據要快的多,但比流式缺少優雅和簡單的編碼特性。
適用場景
BIO
適用與連接數目比較小且固定的架構,對服務器資源要求高,併發侷限於應用中,但程序直觀簡單易理解。
NIO
適用於連接數據多且連接比較短的架構。比如聊天服務器,併發侷限與應用,程序比較複雜。
AIO
適用於連接數目多且比較長的架構。比如相冊服務器,充分調用OS
參與併發操作,程序複雜。
java版本中的IO
JDK1.4
之前的IO
沒有緩衝區的概念,不支持正則表達式,支持的字符集編碼有限等等。
JDK1.4
的時候引入了非阻塞IO
,也就是NIO 1.0
,但遍歷目錄很困難,不支持文件系統的非阻塞操作等等。
爲了解決這些問題,JDK1.7
的時候引入了新的NIO
–NIO 2.0