Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中循环缓冲区的实现_Java_Android_C - Fatal编程技术网

Java 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中实现循环缓冲区


如果存在预定义的方法,是否有方法可以重复使用?或者我们在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都是动态实现的,对我们中的一些人来说,这需要定制静态容量的实现