我们如何在Android中实现循环缓冲区实现?
如果存在,我们是否可以重新使用预定义的方法?或者我们是否支持Android中的C标准库?
答案 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 + ")";
}
}
以下是一些其他有用的链接,可以提供必要的解释..
答案 1 :(得分:0)
我刚刚意识到ArrayDeque对此很好。
Android支持还有CircularArray。
CircularArray是一种提供的通用循环数组数据结构 O(1)随机读,O(1)前置和O(1)追加。 CircularArray 当添加的项目数量结束时自动增加其容量 它的能力。
我无法告诉它的表现,但是从快速浏览一下Javadocs,它似乎在设计时考虑了效率。不再那么肯定了。