Java学習ノートのByteBuffer
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をパラメータとして、バッファ内の残りのバイトをチャネルに書き込むことを試みる.
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 <= <= <= <=