NIO学習ノート2(ByteBuffer)

1244 ワード

ByteBufferという類は少し卵が痛いです
nioで最もよく使われるバイトストリーム運搬ツールとして、ByteBufferは非常に使いやすいインタフェースをたくさん提供しています.
まずオブジェクトを作成するには、主に2つの方法があります.

ByteBuffer buffer;
// buffer, int 
buffer=ByteBuffer.allocate(1024);
// byte[] , byte[] length 
// b byte[]
buffer=ByteBuffer.wrap(b);

値の注意はByteBufferのいくつかの属性です
position:現在のポインタ位置
Limit:有効データ領域
Capacity:バッファ容量
ByteBufferが作成された場合、デフォルトposition=0、limit=capacity
SOcketChannelを実行します.义齿write(buffer)するとpositionがlimitに移動します
様々なputメソッドを含めてpositionを右に移動させます.positionがlimitに移動すると終了が宣言されます(limit後も使用可能なキャッシュがあります).
flip()メソッドは、現在のlimitを現在のpositionに移動させ、positionをゼロにする回転コマンドであり、ByteBufferの有効データ領域は現在のposition位置によって決定される.この方法は通常、読み書き変換の場合に用いられる.
clear()メソッドは、ByteArray全体をリセットし、positionは0に戻り、limitはcapacityに戻ります.
ByteArrayのputメソッドとgetメソッドは多くの便利なインタフェースを与えている.
例えば、putIntおよびgetInt、putCharおよびgetChar.整形や文字タイプを占有するbyteビット数に直接変換して埋めることができ、そうでなければ自分で何とかするしかない.
ただし、値の注意点は、現在のByteArrayのbyte[]配列を返すarray()メソッドによってByteArrayが返されることです.理解偏差LZがここで穴にはまったのは惨めなので、ここで警告します.
Array()メソッドは、ByteArrayのpositionをlimitセグメントのbyte[]配列に出力するのではなく、キャッシュ領域のすべてのbyte[]配列を出力します.limitの後も含めて!!!
今日の総括はここまでで、もし誤りがあれば指摘を歓迎して、LZは尾を切る問題を処理しました