web-dev-qa-db-ja.com

Java:NIOとNIO.2の違いは何ですか?

私はそれらがお互いにどれほど異なるかをよく理解していないので、これらの2つのパッケージに関していくつか質問があります。

Googleを少し調べた後、OracleはJDK7リリースの一部としてNIOパッケージをより新しく強化されたNIO.2パッケージで更新することにしたようです。

  1. NIOパッケージのパフォーマンスはNIO.2パッケージと比較してどうですか?
  2. NIOからNIO.2への大きな変更点は何ですか? (例:新しいメソッド、機能)
  3. 元のNIOパッケージを更新する必要があったのはなぜですか?
  4. NIO.2は、最近のNIOパッケージと同義語ですか?

コードでレガシーパッケージを使用したいわけではありません。これに興味があります。それらの違いを教えてください?

72
John Huynh

Javaは、ファイルシステムにアクセスするJava.ioパッケージでFileクラスを提供することから始めました。このオブジェクトはファイル/ディレクトリを表し、ファイル/ディレクトリが存在するかどうかの確認、プロパティの取得、削除などの操作を実行できました。ただし、いくつかの欠点がありました。いくつか例を挙げると:

  • Fileクラスには、copyメソッドなどのいくつかの重要な機能がありませんでした。
  • また、booleanを返す多くのメソッドを定義しました。想像できるように、エラーの場合、例外をスローするのではなく、falseが返されました。実際、開発者は失敗した理由を知る方法がありませんでした。
  • シンボリックリンクのサポートに関する適切な処理を提供しませんでした。
  • ファイル属性の限られたセットが提供されました。

これらの問題を克服するために、Java.nioパッケージがJava 4で導入されました。主な機能は次のとおりです。

  • チャンネルとセレクター:チャンネルは、低レベルのファイルシステム機能を抽象化したものです。メモリマップファイル。
  • バッファ:すべてのプリミティブクラスのバッファリング(ブール型を除く)。
  • 文字セット:バイトとUnicodeシンボルをマップする文字セット(Java.nio.charset)、エンコーダー、およびデコーダー

Java 7では、Java.nio.fileパッケージが導入され、シンボリックリンク、ファイル属性アクセスの処理のサポートが向上し、特にパス、パス、ファイルなどのクラスによるファイルシステムの拡張をサポートします。 。 Java.nio.fileパッケージの説明 を参照して、詳細を確認したい場合があります。

これを考慮して:

NIOからNIO.2への大きな変更点は何ですか? (例:新しいメソッド、機能)?

それらは異なる目的に役立ちます。大きな変更を指摘するには、すべての新しいパッケージJava.nio.fileを調べてください。

元のNIOパッケージを更新する必要があったのはなぜですか?

しませんでした。更新ではなく、新しいパッケージが導入されました。

NIO.2は最近のNIOパッケージと同義語ですか? NIOパッケージのパフォーマンスはNIO.2パッケージと比較してどうですか?

いいえ、それらは同義ではありません。また、それらは異なる目的に役立つため、それらの間でパフォーマンスを比較することはあまり意味がありません。 NIOは、ファイル管理に重点を置いた、より抽象的な低レベルのデータI/OおよびNIO2です。

お役に立てれば。

[参考文献:Oracle Certified Professional Java SE7-S​​.G. GaneshおよびTushar Sharmaによる包括的なOCJP7認定ガイド-第9章]

78
Sousa Gaspar

NIO.2が導入されました 非同期I/O

非同期I/Oは、NIOでサポートされていない非ブロッキングI/Oへのアプローチです。

NIO:セレクター/リアクターパターン

NIO.2:完了ハンドラー/ proactor pattern

したがって、Windowsの場合、 NIO.2はI/O完了ポートを使用 であり、これによりパフォーマンスが向上します。ただし、サーバー側でWindowsを使用している人はいないため、誰も知らない。

46