iT邦幫忙

DAY 30
2

Java SE 在 1.4 時加入了 NIO (New I/O) 的新API,事隔多年後,在 Java SE 7 裡加入了第二代 NIO - NIO2 (JSR-203)。
第二代的 NIO(NIO2) 新增了三個主要的功能:

  1. File System API 的增強
  2. Asynchronous IO
  3. 其它

**********
File System API 從 Java 1.0 開始,十幾年來一點都沒改進,而且功能少的可以!這次的 NIO2 總算增強、補齊了這塊拼圖。主要的改進有:

* 不同平台的完整支援
早期的 File System API 不論是對 Windows 或是 Linux 平台的檔案系統都不友善,你只能用它來做基本的檔案存取,沒有辦法做進階地處理,像是檔案的權限等…。而新的 File System API 則是依各個平台的不同,而有不同的實作,能完整地支援各個平台其檔案系統的特色。而且程式開發者可以透過標準且統一的介面,來操作檔案系統,不需要擔心底層到底是什麼平台。

* 完整的檔案操作
舊的 File System API 只能簡單地刪除檔案,想要拷備或是搬移檔案,都得自己處理。而新的 File System API 提供了完整的 拷備(copy)、搬移(move)和刪除(delete)的方法,讓你能輕易地操作這個檔案。

* 檔案捷徑(symbolic link)的支援
檔案捷徑不是一個完整的檔案,而是某一個實體檔案的替身,因為它不是一個完整的檔案,所以舊的 File System API 並沒有辦法正確的處理它,現在透過新的 File System API 就沒這個困擾了。

* 完整檔案屬性的存取
一個檔案有許多不同的屬性(attribute),例如是誰建立了這個檔案?哪些人有這個檔案的存取權限等…而不同的平台上會有一些該平台特別的屬性,像是隱藏檔案的屬性,在Windows 和 Linux 平台上就不一樣。新的 File System API 提供了完整存取不同平台檔案屬性的方法。

* 其它
其它新的 File System API 功能有,像是能走訪整個目錄(包含目錄下的檔案及其子目錄)的 File tree walk API;還有檔案系統的監看API (WatchService),你可以用它來監看檔案系統裡有哪些檔案被新增、修改或刪除了。還有像是檔案過濾器(Glob),你可以在讀取檔案列表時,設定你要的過濾條件,只列出你想要的檔案,例如所有的 .java 檔案或是 .jpg 案。新的 File System API 真的是大大補完了原本所欠缺的功能,應該能滿足你絕大部份的檔案操作需求。

**********
在 Java SE 7之前,所有的 I/O 操作都是同步的(synchronous),所謂的同步操作是指檔案存取時,程式必需等在那裡,一直到檔案資料都讀完/存完後,才會執行下一行程式碼。而 asynchronous 是非同步的意思,跟同步最大的差別在於,例如我要把一張很大的圖片存起來,我只要執行了存檔的程式碼後,程式就可以去執行別的程式碼,當存好後,Java 會自動通知你存好了,然後你再回來處理下一個動作。非同步 I/O 對於大量的檔案處理是巨大的檔案處理時,非常地有效率,程式不會因為長時間的檔案存取,而整個程式像當機一樣卡在那裡。

**********
其它新的 NIO2 的功能還有支援 GB 級的存取緩衝區(buffer)、網路廣播(Multicasting)等。

NIO2 的東西實在太多了,在這裡只能給大家一個簡單的介紹,有興趣的讀者可以進一步查閱 NIO2 的相關文件,筆者也會慢慢地把相關的範例程式給補上,敬請期待~


上一篇
JDBC 4.1
下一篇
結束是另一個開始~
系列文
實戰 Java SE 7 31

1 則留言

0
pqr0007
iT邦研究生 1 級 ‧ 2011-11-11 22:00:51

new topic, thanks!

我要留言

立即登入留言