-1

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

这里的情况是我有两个大小相等的缓冲区,我需要在它们一个接一个满时交换它们..

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

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

然后当 buff2 满时

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

上述循环继续

那么如何检测缓冲区何时已满并准备好被交换呢?

4

2 回答 2

2

那么我如何检测缓冲区何时已满

缓冲区本身永远不会满(或空)。它只是固定数量的保留内存。

您需要自己跟踪有用的部分(即具有有意义数据的部分)。通常,这只是一个整数,用于计算写入缓冲区的字节数(从头开始)。

当该整数达到缓冲区长度时,您的缓冲区是“满的”。

于 2012-06-27T06:26:54.140 回答
0

可以使用三个值来指定缓冲区在任何给定时刻的状态:源链接

* position
* limit
* capacity

位置

从通道读取数据时,会将读取的数据放入底层数组中。位置变量跟踪您写入的数据量。更准确地说,它指定下一个字节将进入哪个数组元素。因此,如果您已从通道读取三个字节到缓冲区,则该缓冲区的位置将设置为 3,指的是数组的第四个元素。

限制

limit 变量指定还有多少数据要获取(在从缓冲区写入通道的情况下),或者还有多少空间可以将数据放入(在从通道读取到缓冲区的情况下) . 位置总是小于或等于限制。

容量

缓冲区的容量指定了其中可以存储的最大数据量。实际上,它指定了底层数组的大小——或者,至少,我们被允许使用的底层数组的数量。限制永远不能大于容量。

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

检查 position 和 capacity 字段或 limit 的值。

于 2012-06-27T06:31:26.933 回答