十一、Java IO NIO

Java IO 方式有不少種,基於不一樣的 IO 抽象模型和交互方式,能夠進行簡單區分。java

傳統的 java.io 包,它基於流模型實現,提供了咱們最熟知的一些 IO 功能,好比 File 抽象、輸入輸出流等。交互方式是同步、阻塞的方式,也就是說,在讀取輸入流或者寫入輸出流時,在讀、寫動做完成以前,線程會一直阻塞在那裏,它們之間的調用是可靠的線性順序。java.io 包的好處是代碼比較簡單、直觀,缺點則是 IO 效率和擴展性存在侷限性,容易成爲應用性能的瓶頸。不少時候,人們也把 java.net 下面提供的部分網絡 API,好比 Socket、ServerSocket、HttpURLConnection 也歸類到同步阻塞 IO 類庫,由於網絡通訊一樣是 IO 行爲。網絡

 JDK 1.4 中引入了 NIO 框架(java.nio 包),提供了 ChannelSelectorBuffer 等新的抽象,能夠構建多路複用的、同步非阻塞 IO 程序,同時提供了更接近操做系統底層的高性能數據操做方式。框架

在 Java 7 中,NIO 有了進一步的改進,也就是 NIO 2,引入了異步非阻塞 IO 方式,也有不少人叫它 AIO(Asynchronous IO)。異步 IO 操做基於事件和回調機制,能夠簡單理解爲,應用操做直接返回,而不會阻塞在那裏當後臺處理完成,操做系統會通知相應線程進行後續工做。異步

 

從傳統 IO(BIO) NIONIO 2(AIO),其中有不少地方能夠擴展開來,考察點涉及方方面面,好比:性能

  • 基礎 API 功能與設計, InputStream/OutputStream 和 Reader/Writer 的關係和區別。spa

  • NIO、NIO 2 的基本組成。操作系統

  • 給定場景,分別用不一樣模型實現,分析 BIO、NIO 等模式的設計和實現原理。.net

  • NIO 提供的高性能數據操做方式是基於什麼原理,如何使用?線程

  • 或者,從開發者的角度來看,你以爲 NIO 自身實現存在哪些問題?有什麼改進的想法嗎?設計

相關文章
相關標籤/搜索