Android / Java简单的FiFO缓冲区

时间:2013-02-11 14:31:19

标签: java android buffer fifo

我在寻找简单的字节FiFo缓冲区。我必须放置或获取或单个字节或数组。但是我每次都可以将单字节放入并获得数组,反之亦然 有什么想法或示例代码可以帮助我吗?

3 个答案:

答案 0 :(得分:5)

您可以使用LinkedList作为队列:

    Queue<String> qe=new LinkedList<String>();

    qe.add("b");
    qe.add("a");
    qe.add("c");
    qe.add("e");
    qe.add("d");

    Iterator it=qe.iterator();

    System.out.println("Initial Size of Queue :"+qe.size());

    while(it.hasNext())
    {
        String iteratorValue=(String)it.next();
        System.out.println("Queue Next Value :"+iteratorValue);
    }

    // get value and does not remove element from queue
    System.out.println("Queue peek :"+qe.peek());

    // get first value and remove that object from queue
    System.out.println("Queue poll :"+qe.poll());

    System.out.println("Final Size of Queue :"+qe.size());

如果您还想添加优先级,可以使用PriorityQueue

如果您需要线程安全,请使用ConcurrentLinkedQueue

另外,正如@Leonidos所说,你可以使用ByteBuffer你需要低级I / O,但要小心。

如果您需要有关如何使用它们的任何说明,请随时对该帖子发表评论。

答案 1 :(得分:2)

如果您进行密集的I / O,您最好根据自己的需要调整ByteBuffer。它工作得非常快,允许写入和读取单字节数据或字节数组。 ByteBuffer有时很棘手,小心)

答案 2 :(得分:0)

我写的一个快速而肮脏的Fifo实现:

import java.util.ArrayList;
import java.util.List;

public class FifoList<T> {
    private List<T> list = new ArrayList<>();
    public static final int MAX_CAPACITY = 500;
    private int capacity;
    private int sp = -1;

    public FifoList(int capacity) {
        this.capacity = capacity;
    }

    public void push(T data) {
        sp++;

        if (sp == capacity) {
            list.remove(0);
            list.add(data);
            sp--;
        } else {
            list.add(data);
        }
    }

    public T pop() {
        if (sp == -1) {
            throw new IllegalArgumentException("Trying to remove element from 
            empty list.");
        }

        T data = list.remove(sp);
        sp--;
        return data;
    }

    public boolean empty() {
        return list.isEmpty();
    }
}