Android中的循环缓冲区实现

时间:2015-06-03 06:04:54

标签: java android c

我们如何在Android中实现循环缓冲区实现?

如果存在,我们是否可以重新使用预定义的方法?或者我们是否支持Android中的C标准库?

2 个答案:

答案 0 :(得分:4)

在Android开发中,首选是使用Java而不是C来实现这些东西。当然你可以用C(使用JNI)做到这一点,但这需要一定的开销,即你需要实现自己的垃圾收集逻辑以及循环缓冲区的代码,而在Java中,这可以自动实现。 。如果适用于您的情况,请参阅下面的课程。

import java.nio.BufferOverflowException;
import java.nio.BufferUnderflowException;

public class CustomCircularBuffer<T> {

  private T[] buffer;

  private int tail;

  private int head;


  public CustomCircularBuffer(int n) {
    buffer = (T[]) new Object[n];
    tail = 0;
    head = 0;
  }

  public void add(T toAdd) {
    if (head != (tail - 1)) {
        buffer[head++] = toAdd;
    } else {
        throw new BufferOverflowException();
    }
    head = head % buffer.length;
  }

  public T get() {
    T t = null;
    int adjTail = tail > head ? tail - buffer.length : tail;
    if (adjTail < head) {
        t = (T) buffer[tail++];
        tail = tail % buffer.length;
    } else {
        throw new BufferUnderflowException();
    }
    return t;
  }

  public String toString() {
    return "CustomCircularBuffer(size=" + buffer.length + ", head=" + head + ", tail=" + tail + ")";
  }
}

以下是一些其他有用的链接,可以提供必要的解释..

Example

Another Example

In Depth Article

答案 1 :(得分:0)

我刚刚意识到ArrayDeque对此很好。

Android支持还有CircularArray

  

CircularArray是一种提供的通用循环数组数据结构   O(1)随机读,O(1)前置和O(1)追加。 CircularArray   当添加的项目数量结束时自动增加其容量   它的能力。

我无法告诉它的表现,但是从快速浏览一下Javadocs,它似乎在设计时考虑了效率。不再那么肯定了。