ホームページ  >  記事  >  Java  >  Java NIO チャネルとバッファーはどのように機能しますか?

Java NIO チャネルとバッファーはどのように機能しますか?

WBOY
WBOY転載
2023-05-07 14:25:08875ブラウズ

チャネルとバッファは 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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。