Java最初開始時通過提供File
類,在java.io
包中訪問文件系統。這個對象代表一個文件/目錄,並允許你執行一些操作,比如檢查文件/目錄是否存在,獲取屬性並刪除它。但它有一些缺點。僅舉幾例:
- File類缺少一些重要的功能,例如複製方法。
- 它還定義了許多返回
boolean
的方法。可以想象,如果發生錯誤,返回false
,而不是拋出異常。事實上,開發者無法知道它爲什麼失敗。
- 未提供對符號鏈接支持的良好處理。
- 提供了一組有限的文件屬性。
爲了克服這些問題,java.nio包在Java被引入4的主要功能是:
- 頻道和選擇:通道是在較低級別的文件系統功能,例如一個抽象內存映射文件。
- 緩衝區:緩衝所有原始類(布爾除外)。
- 字符集:字符集(java.nio.charset中),編碼器和解碼器來映射字節和Unicode符號
與Java 7 java.nio.file包被引入用於處理符號鏈接提供了更好的支撐,文件屬性訪問,並特別支持通過路徑,路徑和文件等類擴展文件系統。您可能想看看java.nio.file package description以瞭解更多詳情。
考慮到這一點:
都有些什麼大的變化,從NIO到NIO.2? (例如新方法, 功能)?
他們服務於不同的目的。要指出重大更改,您可能需要查看全新套件java.nio.file
。
爲什麼最初的NIO包必須更新?
它沒有。一個新的軟件包被引入而不是更新。
現在NIO.2是否與NIO軟件包同義? NIO包的性能與NIO.2包相比如何?
不,它們不是同義詞。比較它們之間的性能也沒有多大意義,因爲它們服務於不同的目的。 NIO更抽象的低級別數據I/O和NIO2專注於文件管理。
希望這會有所幫助。
[參考書目:Oracle認證專家的Java SE7 - 全面OCJP7認證指南, 通過S.G.Ganesh和圖莎爾夏爾馬 - 第9章]
NIO2引入了異步I/O和java.nio.files包。 – EJP 2014-08-27 22:21:00
是嗎?我有一個印象NIO.2是巨大的。 – 2014-08-27 22:28:32
首先他們有IO。然後他們介紹了「新IO」。然後他們想要引入更多功能,所以他們巧妙地將其命名爲「New IO 2」。 – Kayaman 2014-08-27 22:37:07