Java提供了哪些IO方式? NIO如何實現多路復用?


Java IO 方式有很多種,基於不同的 IO 抽象模型和交互方式,可以進行簡單區分。

首先,傳統的 java.io 包,它基於流模型實現,提供了我們最熟知的一些 IO 功能,比如 File 抽象、輸入輸出流等。
交互方式是同步、阻塞的方式,也就是說,在讀取輸入流或者寫入輸出流時,
在讀、寫動作完成之前,線程會一直阻塞在那里,它們之間的調用是可靠的線性順序。

java.io 包的好處是代碼比較簡單、直觀,缺點則是 IO 效率和擴展性存在局限性,容易成為應用性能的瓶頸。

很多時候,人們也把 java.net 下面提供的部分網絡 API,
比如 Socket、ServerSocket、HttpURLConnection 也歸類到同步阻塞 IO 類庫,因為網絡通信同樣是 IO 行為。

java NIO

Java 1.4 中引入了 NIO 框架(java.nio 包),提供了 Channel、Selector、Buffer 等新的抽象,
可以構建多路復用的、同步非阻塞 IO 程序,同時提供了更接近操作系統底層的高性能數據操作方式。
Java 7 中,NIO 有了進一步的改進,也就是 NIO 2,引入了異步非阻塞 IO 方式,也有很多人叫它 AIO(Asynchronous IO)。
異步 IO 操作基於事件和回調機制,可以簡單理解為,應用操作直接返回,而不會阻塞在那里,
當后台處理完成,操作系統會通知相應線程進行后續工作。 

首先,需要澄清一些基本概念:

區分同步或異步(synchronous/asynchronous)。
1,簡單來說,同步是一種可靠的有序運行機制,當我們進行同步操作時,后續的任務是等待當前調用返回,才會進行下一步;
2,而異步則相反,其他任務不需要等待當前調用返回,通常依靠事件、回調等機制來實現任務間次序關系。 區分阻塞與非阻塞(blocking
/non-blocking)。
1,在進行阻塞操作時,當前線程會處於阻塞狀態,無法從事其他任務,
只有當條件就緒才能繼續,比如 ServerSocket 新連接建立完畢,或數據讀取、寫入操作完成;
2,而非阻塞則是不管 IO 操作是否結束,直接返回,相應操作在后台繼續處理。

Java NIO:IO與NIO的區別

 


免責聲明!

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



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