2012-06-17 174 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