-1

ご存知のとおり、Javaではバイト配列をデータのバッファーとして使用できます。ここでの私の場合はJ2meです

ここでのシナリオは、同じサイズの2つのバッファーがあり、それらが1つずついっぱいになるときにそれらを交換する必要があるというものです。

詳細2つのバッファbuff1とbuff2

他のデータをbuff2に書き込みながら、Buff1からデータを読み取る

その後、buff2がいっぱいになると

彼らは現在、buff2から読み取り、buff1に書き込む位置を入れ替えます。

上記のサイクルは続きます

では、バッファがいっぱいでスワップの準備ができていることをどのように検出すればよいですか?

4

2 に答える 2

2

では、バッファがいっぱいになったことを検出するにはどうすればよいですか

バッファー自体がいっぱい (または空) になることはありません。これは、固定量の予約済みメモリです。

有用な部分 (つまり、意味のあるデータを持つ部分) を自分で追跡する必要があります。通常、これはバッファに書き込まれたバイト数をカウントする単なる整数です (先頭から開始)。

その整数がバッファ長に達すると、バッファは「いっぱい」になります。

于 2012-06-27T06:26:54.140 に答える
0

任意の時点でのバッファの状態を指定するには、次の 3 つの値を使用できます。SOURCE LINK

* position
* limit
* capacity

位置

チャネルから読み取るときは、読み取ったデータを基になる配列に入れます。位置変数は、書き込んだデータの量を追跡します。より正確には、次のバイトがどの配列要素に入るかを指定します。したがって、チャネルからバッファーに 3 バイトを読み取った場合、そのバッファーの位置は 3 に設定され、配列の 4 番目の要素を参照します。

リミット

limit 変数は、取得するデータがどれだけ残っているか (バッファからチャネルに書き込む場合)、またはデータを入れる余地がどれだけあるか (チャネルからバッファに読み取る場合) を指定します。 . 位置は常に制限以下です。

容量

バッファの容量は、そこに格納できるデータの最大量を指定します。実際には、それは基礎となる配列のサイズ、または少なくとも、使用が許可されている基礎となる配列の量を指定します。制限を容量より大きくすることはできません。

so how do I detect when a buffer is full and is ready to be swapped?

位置および容量フィールドの値、または制限を確認してください。

于 2012-06-27T06:31:26.933 に答える