我在寻找简单的字节FiFo缓冲区。我必须放置或获取或单个字节或数组。但是我每次都可以将单字节放入并获得数组,反之亦然 有什么想法或示例代码可以帮助我吗?
答案 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();
}
}