Java学習ノートのByteBuffer

1688 ワード

NIOでは、データの読み書きは常にバッファに関連付けられています.リード時チャネル(SocketChannel)はデータをバッファに読み込み、書き込み時にはまず送信されたデータを順番にバッファに記入します.バッファは一定長で、基本的にはリストにすぎません.その要素は基本データ型です.ByteBufferは最も一般的なバッファです.他のデータ型を読み書きする方法を提供し、チャネルの読み書き方法はByteBufferのみを受信するので、ByteBufferの使い方をしっかり把握する必要がある.
1.ByteBuffer 1.1の作成 allocate()静的メソッドの使用    ByteBuffer buffer=ByteBuffer.allocate(256);    以上の方法では、256バイトの容量を持つByteBufferが作成されます.作成されたバッファの容量が小さすぎる場合は、適切なサイズのバッファを再作成するしかありません. 既存の配列をパッケージして作成    以下に、パッケージの方法により作成するバッファは、パッケージ配列内に保存するデータを保持する.    ByteBuffer buffer=ByteBuffer.wrap(byteArray);    ByteBufferに文字列を格納する場合は、次の操作を行います.    String sendString=「こんにちは、サーバー.」    ByteBuffer sendBuffer=ByteBuffer.wrap(sendString.getBytes("UTF-16"));2.巻き戻しバッファ  buffer.flip();  この方法は、バッファをデータの送出状態として準備するためのものであり、以上の方法を実行すると、出力チャネルは、データの先頭から末尾ではなく末尾から開始する.ループバック保持バッファ内のデータは変わらず、読み取りではなく書き込みの準備をする.3.バッファをクリアする.  buffer.clear();  この方法は実際にはバッファのデータを変えることはなく、単にバッファの主要インデックス値をリセットしただけである.読み書きのたびに新しいバッファを作成する必要はなく、それによって性能が低下する.逆に、現在のバッファを再利用するには、再読み込み前にバッファを消去する.4.ソケットチャネル(チャネル)からデータを読み出す  int bytesReaded=socketChannel.read(buffer);  以上の方法を実行すると、チャネルはsocketから読み出したデータをこのバッファに充填し、読み出しに成功してバッファに格納バイト数を返す.デフォルトでは、少なくとも1バイトを読み出すか、−1を返してデータの終了を示す.5.ソケットチャネル(チャネル)にデータを書き込む.  socketChannel.write(buffer);  この方法は、ByteBufferをパラメータとして、バッファ内の残りのバイトをチャネルに書き込むことを試みる.
 
  ,          ,  Buffer   :                   。    ,             、     :

                  。                。 

                         。          ,         。 

                       。          ,         。

              。

  、  、             : 

0 <=    <=    <=    <=