【问题标题】:Detecting a full byte[] buffer?检测到一个完整的 byte[] 缓冲区?
【发布时间】:2012-06-27 06:23:02
【问题描述】:

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

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

详细 两个缓冲区buff1和buff2

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

那么当buff2满了

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

以上循环继续进行

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

【问题讨论】:

    标签: java arrays java-me buffer


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 哦,是的!神圣的S ** t ..太简单了..呵呵我需要再次学习基础知识..谢谢
    【解决方案2】:

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

    * position
    * limit
    * capacity
    

    位置

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

    限制

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

    容量

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多