2

ネットワークサーバーからのデータを保存するために使用する次の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;           
    }

私の質問は、データの挿入を保存してバッファからデータを取得する適切な方法は何ですか?取得した後にデータを削除する必要がありますか、それともこれがバッファによって行われていますか?バッファに保存できる文字列の最大長のサイズについてのアイデアはありますか?

4

2 に答える 2

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
于 2012-06-17T17:53:22.873 に答える
1

Commons Collections のクラスを使用していると仮定します。

  1. メソッドを使用する場合remove()、追加で何も削除する必要はありません
  2. バッファーには、文字列ではなくオブジェクト参照が格納されるため、割り当てられたスロットの数によって制限されます。あなたの場合、バッファがいっぱいになる前に、プログラムで使用できる合計メモリによって制限された、任意の長さの最大 200 個の文字列を追加できます。

Kumar が指摘したように、Java ランタイム ライブラリのキューイング クラスを代わりに使用した方がよいでしょう。Commons Collections クラスでは反復子を自分でロックする必要がありますが、キューイング クラスは同期を処理します。

于 2012-06-17T18:02:50.667 に答える