Java-nio-vs-io

提供:Dev Guides
移動先:案内検索

Java NIOとIO

私たちが知っているように、Java NIOは従来のJava IO APIの進歩のために導入されています。NIOをIOより効率的にする主な機能強化は、NIOで使用されるチャネルデータフローモデルと従来のIOタスクでのオペレーティングシステムの使用です。

Java NIOとJava IOの違いは次のように説明することができます-

  • NIOバッファーの以前の投稿で述べたように、I/O操作と比較してより高速な実行とパフォーマンスを提供するI/O操作用のチャネル指向のデータフロー。また、NIOは従来のI/Oタスクにオペレーティングシステムを使用するため、効率が向上します。
  • NIOとIOの違いの他の側面は、このIOはストリームラインデータフロー、すなわち一度に1バイトを使用し、NIOがバイトの塊であるデータブロックを処理する間、データオブジェクトをバイトに、またはその逆に変換することに依存していることです。
  • Java IOのストリームオブジェクトは単方向ですが、NIOのチャネルは双方向です。つまり、チャネルはデータの読み取りと書き込みの両方に使用できます。
  • IOのストリームラインデータフローでは、データを前後に移動することはできません。ストリームから読み取ったデータを前後に移動する必要がある場合は、最初にバッファにキャッシュする必要があります。NIOの場合、バッファ指向を使用します。キャッシュを必要とせずにデータにアクセスできます。
  • NIO APIはマルチスレッドもサポートしているため、IO操作の実行中に現在のスレッドがブロックされないようにデータを非同期に読み書きできます。これにより、従来のJava IO APIよりも効率的になります。
  • マルチスレッドの概念は、非同期または非ブロック方式でIOイベントの複数のチャネルをリッスンできるJava NIOの Selectors の導入で導入されました。
  • NIOのマルチスレッド化により、ブロックされないため、データが利用可能な場合にのみスレッドの読み取りまたは書き込みが要求され、そうでない場合は他のタスクでスレッドを平均的に使用できますが、従来のJava IOではマルチスレッド化ができないため、これは不可能ですサポートされており、ブロッキングとして機能します。
  • NIOでは、単一のスレッドのみを使用して複数のチャネルを管理できますが、コストは、データの解析がJava IOの場合にブロッキングストリームからデータを読み取る場合よりも多少複雑になる可能性があることです。一度に大量のデータを送信すると、この場合はJava IO APIが最適です。