众所周知,java允许我们使用字节数组作为数据缓冲区。我的情况是J2me
这里的情况是我有两个相同大小的缓冲区,我需要逐个交换它们。
详细说明 两个缓冲区buff1和buff2
在将其他数据写入buff2时从Buff1读取数据
然后当buff2变满时
他们现在交换他们的位置从buff2读取并写入buff1
以上周期继续进行
那么如何检测缓冲区何时已满并且已准备好进行交换?
答案 0 :(得分:2)
那么如何检测缓冲区何时已满
缓冲区本身永远不会满(或为空)。它只是一个固定数量的保留内存。
您需要自己跟踪有用的部分(即那些有意义的数据)。通常,这只是一个整数,用于计算写入缓冲区的字节数(从头开始)。
当该整数达到缓冲区长度时,缓冲区为“满”。
答案 1 :(得分:0)
可以使用三个值来指定任何给定时刻的缓冲区状态:SOURCE LINK
* position
* limit
* capacity
<强>位置强>
从通道读取时,将读取的数据放入基础数组中。位置变量记录您已写入的数据量。更确切地说,它指定下一个字节将进入哪个数组元素。因此,如果您已经从通道读取三个字节到缓冲区,则该缓冲区的位置将设置为3,指的是数组的第四个元素。
<强>限制强>
限制变量指定剩余的数据量(在从缓冲区写入通道的情况下),或者将数据放入多少空间(在从通道读取的情况下)缓冲区)。 该位置始终小于或等于限制。
<强>能力强>
缓冲区的容量指定可以存储在其中的最大数据量。实际上,它指定了底层数组的大小 - 或者至少是我们允许使用的底层数组的数量。 限制永远不会大于容量。
so how do I detect when a buffer is full and is ready to be swapped?
检查位置和容量字段的值或限制。