この記事では主にJavaのNIOとIOの詳細な説明と比較を紹介しますので、必要な方は参考にしてください
JavaのNIOとIOの違いは、JDK1.4で導入された非同期IOです。コア部分は次の 3 点です:
ChannelNIO と IO の違いは、一般に次の 3 つの側面に反映されます。
IOはストリーム(ストリーム指向)に基づいており、NIOはバッファ(バッファ指向)に基づいています従来のIOはバイトストリームまたは文字ストリームを指向していましたが、NIOでは従来のIOストリームを放棄し、その概念を導入しました。チャネルとバッファの。 NIO では、チャネルからバッファへのデータの読み取り、またはバッファからチャネルへのデータの書き込みのみが可能です。
では、ストリームベースとは何でしょうか? 一般的な Java IO 操作では、ストリームから 1 つ以上のバイトを順番に読み取るため、読み取りポインターの位置を自由に変更することはできません。ただし、バッファに基づいて、最初にデータをチャネルからバッファに読み取る必要があります。バッファにデータがある場合、そのデータを操作できます。
逐次操作である IO とは異なり、NIO では任意の場所にあるデータを自由に読み取ることができます。
ブロッキングと非ブロッキング
たとえば、Java が提供するさまざまな Stream 操作はブロッキングです。たとえば、ファイルの内容を読み取るために read メソッドを呼び出した場合、read を呼び出すスレッドは読み取り操作が完了するまでブロックされます。完成されました。 。 NIO のノンブロッキング モードを使用すると、IO 操作をノンブロッキングで実行できます。たとえば、NIO のノンブロッキング モードでは、read メソッドを呼び出す必要があります。この時点でデータがある場合は read が読み取り、現時点でデータがない場合は read が返されます。直接実行され、現在のスレッドはブロックされません。
selector
selector は、NIO に固有の概念であり、Java NIO がノンブロッキング方式で IO 操作を実行できる理由の鍵となります。 セレクターを介して、スレッドは複数のチャネルの IO イベントを監視できます。セレクターにチャネルを登録すると、セレクターの内部メカニズムが、これらの登録された IO イベントのいずれかが準備ができているかどうかを自動的に継続的にクエリ (選択) できます。 (読み取り可能、書き込み可能、ネットワーク接続完了など)。このようなセレクター メカニズムを通じて、1 つのスレッドを使用して複数のチャネルを効率的に管理することが簡単にできます。
以上がJava の NIO と IO の比較の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。