チャネルとバッファは NIO の中核オブジェクトであり、ほぼすべての I/O 操作で使用されます。
チャネルは、元の I/O パッケージ内のストリームのシミュレーションです。宛先 (またはどこからでも) へのすべてのデータは、Channel オブジェクトを通過する必要があります。バッファーは本質的にコンテナ オブジェクトです。チャネルに送信されるすべてのオブジェクトは、最初にバッファに配置される必要があります。同様に、チャネルから読み取られるデータはすべてバッファに読み込まれる必要があります。
バッファとは何ですか?
Buffer は、書き込まれるか、単に読み取られるデータを含むオブジェクトです。 NIO への Buffer オブジェクトの追加は、新しいライブラリと元の I/O の間の重要な違いを反映しています。ストリーム指向の I/O では、データを Stream オブジェクトに直接書き込みまたは読み取ります。
NIO ライブラリでは、すべてのデータはバッファを使用して処理されます。データを読み取る場合、データはバッファに直接読み込まれます。データが書き込まれる場合、データはバッファに書き込まれます。 NIO 内のデータにアクセスするたびに、データはバッファーに置かれます。
バッファは本質的には配列です。通常はバイト配列ですが、他の種類の配列も使用できます。しかし、バッファは単なる配列ではありません。バッファはデータへの構造化されたアクセスを提供し、システムの読み取り/書き込みプロセスを追跡することもできます。
バッファ タイプ
最も一般的に使用されるバッファ タイプは ByteBuffer です。 ByteBuffer は、その基礎となるバイト配列に対して get/set 操作 (つまり、バイトの取得と設定) を実行できます。
ByteBuffer は、NIO の唯一のバッファー タイプではありません。実際、すべての基本的な Java 型にはバッファ型があります。
ByteBuffer CharBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer
すべての Buffer クラスは、Buffer インターフェイスのインスタンスです。 ByteBuffer を除いて、すべての Buffer クラスはまったく同じ操作を行いますが、処理するデータ型が異なります。ほとんどの標準 I/O 操作は ByteBuffer を使用するため、すべての共有バッファー操作といくつかの固有の操作が含まれます。
ここで、型付きバッファの使用例が含まれている UseFloatBuffer.java を実行してみましょう。
チャンネルとは何ですか?
チャネルは、データの読み取りと書き込みを行うことができるオブジェクトです。 NIO を元の I/O と比較すると、チャネルはストリームに似ています。
前述したように、すべてのデータは Buffer オブジェクトを通じて処理されます。チャネルに直接バイトを書き込むことはありません。代わりに、1 つ以上のバイトを含むバッファにデータを書き込みます。繰り返しますが、チャネルから直接バイトを読み取るのではなく、チャネルからデータをバッファに読み取り、バッファからこのバイトを取得します。
チャネル タイプ
チャネルとストリームの違いは、チャネルが双方向であることです。ストリームは一方向にのみ移動します (ストリームは、InputStream または OutputStream のサブクラスである必要があります) が、チャネルは読み取り、書き込み、またはその両方に使用できます。
チャネルは双方向であるため、ストリームよりも基盤となるオペレーティング システムの現実をよりよく反映できます。特に UNIX モデルでは、基礎となるオペレーティング システム チャネルは双方向です。
以上がJava NIO チャネルとバッファーはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。