web-dev-qa-db-ja.com

ioパッケージですでにメソッドが使用可能な場合、Java nioパッケージの正確な使用は何ですか

私はJava nioパッケージを学習していましたが、Fileによって既に提供されている多くのメソッドがあり、nio.FilesがPathクラスを使用して再び提供しています。 nioパッケージの実際の使用方法を取得します。

私はこのパッケージを初めて使用するので、質問は間違っているかもしれませんが、少し助けていただければさらに読みやすくなります。

37

IOとNIOの主な違いは、IOがブロッキングであるのに対し、NIOはノンブロッキングです。

この記事 は、パッケージの違いと、ブロッキングとノンブロッキングIOとは何かを説明しています。

21
Deco

Javaプログラミング、I/Oは最近までストリームメタファーを使用して実行されてきました。すべてのI/Oは、ストリームと呼ばれるオブジェクトを介して、1バイトずつ移動するものと見なされます。ストリームI/Oは、外部との連絡に使用されます。また、オブジェクトをバイトに変換してからオブジェクトに戻すために、内部的に使用されます。

NIOには元のI/Oと同じ役割と目的がありますが、ブロックI/Oという異なるメタファーを使用します。 Java.nio(新規/非ブロッキングI/O))APIはJDK1.4で導入されました。

ストリームI/OとブロックI/Oの違いは何ですか?

ストリーム指向のI/Oシステムは、一度に1バイトのデータを処理します。入力ストリームは1バイトのデータを生成し、出力ストリームは1バイトのデータを消費します。ストリーミングデータのフィルターを作成するのは非常に簡単です。また、複数のフィルターをチェーン接続することも比較的単純であるため、各フィルターは、1つの洗練された処理メカニズムに相当する役割を果たします。逆に、ストリーム指向のI/Oはかなり遅いことがよくあります。

ブロック指向のI/Oシステムは、データをブロック単位で処理します。各操作は、1つのステップでデータのブロックを生成または消費します。ブロックによるデータ処理は、(ストリーム化された)バイトによるデータ処理よりもはるかに高速です。しかし、ブロック指向のI/Oには、ストリーム指向のI/Oの優雅さとシンプルさが欠けています。

Java.ioを使用する場合とJava.nioを優先する場合はいつですか?

  1. スケーラビリティにより、おそらくパッケージの選択が促進されます。 Java.netでは、ソケットごとに1つのスレッドが必要です。コーディングは非常に簡単になります。 Java.nioははるかに効率的ですが、コーディングするのは困難です。

  2. 数万の接続を処理するとスケーラビリティが向上する場合がありますが、数が少ない場合は、IOのブロックによりスループットが向上する可能性があります。

  3. SSLを使用する場合、Java.nioは扱いにくいものです。

重要:いずれかのパッケージを使用している場合、やむを得ない理由がない限り、最初からフレームワークを作成することはお勧めできません。

Java.nioの場合、GrizzlyやQuick Serverなどのプロジェクトは、再利用可能なノンブロッキングサーバーコンポーネントを提供します。

読む価値がある Java.nioの苦痛ポイント

最後に、プロジェクトの特定の要件と達成しようとしているものに要約します。最高のソリューションの中には、最も複雑なインフラストラクチャを必要としないものもあります。

更新:最近、jdk 1.7以降に存在するNIO.2パッケージについて発見されました。 NIO.2はNIOとは異なり、主なものはNIO.2が非同期チャネル機能を提供することです。 NIO.2プライマー

NIOを使用している場合は、違いと、どちらが目的に合っているかを検討する価値があります。

12
vsingh

Java NIO:チャネルとバッファ
標準のIO AP​​Iでは、バイトストリームと文字ストリームを操作します。 NIOでは、チャンネルとバッファーを操作します。データは常にチャネルからバッファに読み込まれるか、バッファからチャネルに書き込まれます。

Java NIO:ノンブロッキングIO
Java NIOを使用すると、ノンブロッキングIOを実行できます。たとえば、スレッドはチャネルにデータをバッファに読み込むように要求できます。チャネルがデータをバッファに読み込む間、スレッドは他のことを行うことができます。データがバッファに読み込まれると、スレッドは処理を続行できます。同じことは、チャネルにデータを書き込む場合にも当てはまります。

Java NIO:セレクター
Java NIOには「セレクター」の概念が含まれています。セレクターは、複数のチャネルでイベントを監視できるオブジェクトです(接続のオープン、データの到着など)。したがって、単一のスレッドで複数のチャネルのデータを監視できます。
orcaleの詳細

8
Jitendra

Java.io.Fileのほぼすべてのメソッドには、互換性の理由で修正できない問題があります。最も明白なのは、メソッドが失敗したときにbooleanを返すことです。これらの問題に加えて、プラガブルファイルシステムやその他の多くのことをサポートするために、完全に新しいファイルシステムAPIの開発が必要になったため、Java.nio.Fileが作成されました。

2
Alan

NIOは、ストリーム-ファイル、ソケット、ネットワークの特殊化を抽象化するチャネルも導入しました。

2
dexter2305