2014-08-27 56 views
52

我不太明白他們彼此有什麼不同,所以我對這兩個軟件包有一些疑問。Java:NIO和NIO.2究竟有什麼區別?

在谷歌環顧了一下後,似乎甲骨文決定更新NIO包,使用更新的增強版NIO.2包作爲JDK7發行版的一部分。

  1. NIO包的性能如何與NIO.2包進行比較?
  2. NIONIO.2有什麼重大變化? (例如新方法,特徵)
  3. 爲什麼原始NIO包必須更新?
  4. NIO.2現在只是NIO包的代名詞嗎?

這不是我想在我的代碼中使用遺留軟件包,我只是很好奇這件事。請告訴我他們的區別?

+1

NIO2引入了異步I/O和java.nio.files包。 – EJP 2014-08-27 22:21:00

+0

是嗎?我有一個印象NIO.2是巨大的。 – 2014-08-27 22:28:32

+0

首先他們有IO。然後他們介紹了「新IO」。然後他們想要引入更多功能,所以他們巧妙地將其命名爲「New IO 2」。 – Kayaman 2014-08-27 22:37:07

回答

51

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章]

33

NIO.2介紹asynchronous i/o

異步I/O是一種不受NIO支持的非阻塞I/O的方法。

NIO:選擇器/電抗器圖案

NIO.2:完成處理程序/ proactor pattern

因此在Windows,NIO.2 uses I/O Completion Ports,應該提高性能時。除了沒有人知道,因爲沒有人在服務器端使用Windows,如果他們這樣做,他們可能會這樣做,因爲他們大量投資於.net,因此很可能不會考慮使用Java。

+1

永不言敗。有許多基於Windows的服務器正在使用中,特別是當預計的工作負載不高時。 – 2017-02-17 13:34:32

相關問題