检测完整的byte []缓冲区?

时间:2012-06-27 06:23:03

标签: java arrays java-me buffer

众所周知,java允许我们使用字节数组作为数据缓冲区。我的情况是J2me

这里的情况是我有两个相同大小的缓冲区,我需要逐个交换它们。

详细说明 两个缓冲区buff1和buff2

在将其他数据写入buff2时从Buff1读取数据

然后当buff2变满时

他们现在交换他们的位置从buff2读取并写入buff1

以上周期继续进行

那么如何检测缓冲区何时已满并且已准备好进行交换?

2 个答案:

答案 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?

检查位置和容量字段的值或限制。