2012-06-17 175 views
2

我有这样的FIFO,我打算使用存储从网络服务器数据:有道与FIFO缓冲器工作

Buffer nServerFifo = (Buffer) BufferUtils.synchronizedBuffer(new CircularFifoBuffer(200)); 

    // Insert into to the Network Server Buffer  
    public void nServerFifoAdd(String string){ 
     nServerFifo.add(string);   
    } 

    // Get data from the Network Server Buffer 
    public Object nServerFifoGet(){   
     Object string = nServerFifo.get();  
     nServerFifo.remove(string); 
     return string;   
    } 

我的问题是什么是存储数据的插入和获取数据的正确方法从缓冲区?如果缓冲区完成,我是否需要删除数据?你有想法什么是我可以存入缓冲区的最大字符串长度大小?

回答

3

它更好地使用ArrayBlockingQueue class这是在java.util.concurrent包,这是线程安全。

BlockingQueue<String> queue = new ArrayBlockingQueue<String>(100); 

queue.put("Vivek"); // To insert value into Queue 

queue.take();   // To take the value out of Queue 
+0

ArrayBlockingQueue和CircularFIFOBuffer有什么区别?哪一个更快? – user1285928

+0

ArrayBlockingQueue从java 1.5开始存在,并且可以执行所有的CircularFIFOBuffer .. –

+0

当我使用'queue.take();'获取字符串时是否需要使用'queue.remove(“Vivek”)删除队列元素? );'或者这是自动完成的? – user1285928

1

假设你正在使用从共享集合类:

  1. 如果使用remove()方法,你不需要额外删除任何
  2. 缓冲存储对象的引用,而不是字符串,所以它受到分配的插槽数量的限制。在你的情况下,你可以在缓冲区满之前添加多达200个任意长度的字符串,受限于程序可用的总内存。

正如Kumar指出的那样,您可能最好使用Java运行时库排队类,因为它们为您处理同步,而Commons Collections类需要您自己锁定迭代器。

+0

在我的情况下,我存储XML。你会为此推荐哪种缓冲区? – user1285928