Java Android中循环缓冲区的实现
我们如何在Android中实现循环缓冲区Java Android中循环缓冲区的实现,java,android,c,Java,Android,C,我们如何在Android中实现循环缓冲区 如果存在预定义的方法,是否有方法可以重复使用?或者我们在Android中支持C标准库吗?在Android开发中,首选使用Java而不是C来实现这些东西。当然,您可以在C(使用JNI)中实现这一点,但这需要一定的开销,即您需要实现自己的垃圾收集逻辑以及循环缓冲区的代码,而在Java中,这可以自动实现。如果它对您的案例有效,请参见下面的课程 import java.nio.BufferOverflowException; import java.nio.Bu
如果存在预定义的方法,是否有方法可以重复使用?或者我们在Android中支持C标准库吗?在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 + ")";
}
}
import java.nio.BufferOverflowException;
导入java.nio.BufferUnderflowException;
公共类自定义循环缓冲区{
专用T[]缓冲区;
私人内特尾;
私人内部主管;
公共客户循环缓冲区(int n){
缓冲区=(T[])新对象[n];
尾=0;
水头=0;
}
公共无效添加(T到添加){
如果(头部!=(尾部-1)){
缓冲区[head++]=toAdd;
}否则{
抛出新的BufferOverflowException();
}
头=头%buffer.length;
}
公共部门得不到{
T=零;
int adjTail=尾部>头部-尾部-缓冲区。长度:尾部;
if(adjTail
下面是一些其他有用的链接,可以提供必要的解释
在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 + ")";
}
}
import java.nio.BufferOverflowException;
导入java.nio.BufferUnderflowException;
公共类自定义循环缓冲区{
专用T[]缓冲区;
私人内特尾;
私人内部主管;
公共客户循环缓冲区(int n){
缓冲区=(T[])新对象[n];
尾=0;
水头=0;
}
公共无效添加(T到添加){
如果(头部!=(尾部-1)){
缓冲区[head++]=toAdd;
}否则{
抛出新的BufferOverflowException();
}
头=头%buffer.length;
}
公共部门得不到{
T=零;
int adjTail=尾部>头部-尾部-缓冲区。长度:尾部;
if(adjTail
下面是一些其他有用的链接,可以提供必要的解释
我刚刚意识到这将是一个很好的实现
还有来自Android的支持
CircularArray是一种通用的循环数组数据结构,提供
O(1)随机读取、O(1)前置和O(1)追加。环形射线
添加的项目数结束时自动增加其容量
它的能力
我看不出它的性能,但快速浏览一下Javadocs,它的设计似乎考虑到了效率。不再那么确定了。我刚刚意识到这将是一个很好的实现
还有来自Android的支持
CircularArray是一种通用的循环数组数据结构,提供
O(1)随机读取、O(1)前置和O(1)追加。环形射线
添加的项目数结束时自动增加其容量
它的能力
我看不出它的性能,但快速浏览一下Javadocs,它的设计似乎考虑到了效率。不再那么确定了。你读过这个吗?你读过这个吗?谢谢你提供的信息。另一方面,你们应该知道,某些CircularBuffer实现将数组的容量设置为静态,而其他实现则是动态的。Android的CircularArray和Java的ArrayQue都是动态的,对我们中的一些人来说,这需要定制静态容量库来实现信息。另一方面,你们应该知道,某些CircularBuffer实现将数组的容量设置为静态,而其他实现则是动态的。Android的CircularArray和Java的ArrayQue都是动态实现的,对我们中的一些人来说,这需要定制静态容量的实现