典型回答
Java IO 方式有很多種,基于不同的 IO 抽象模型和互動方式,可以進行簡單區分。
第一,傳統的 java.io 包,它基于流模型實作,提供了我們最熟知的一些 IO 功能,比如 File 抽象、輸入輸出流等。互動方式是同步、阻塞的方式,也就是說,在讀取輸入流或者寫入輸出流時,在讀、寫動作完成之前,線程會一直阻塞在那裡,它們之間的調用是可靠的線性順序。
java.io 包的好處是代碼比較簡單、直覺,缺點則是 IO 效率和擴充性存在局限性,容易成為應用性能的瓶頸。
很多時候,人們也把 java.net 下面提供的部分網絡 API,比如 Socket、ServerSocket、HttpURLConnection 也歸類到同步阻塞 IO 類庫,因為網絡通信同樣是 IO 行為。
第二,在 Java 1.4 中引入了 NIO 架構(java.nio 包),提供了 Channel、Selector、Buffer 等新的抽象,可以建構多路複用的、同步非阻塞 IO 程式,同時提供了更接近作業系統底層的高性能資料操作方式。