Правильный способ работы с буфером 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;
}
Мой вопрос заключается в том, как правильно хранить вставку данных и получать данные из буфера? Нужно ли удалять данные после того, как я получу, если это сделано буфером? У вас есть идея, какой максимальный размер строки может быть сохранен в буфере?
2 ответа
Его лучше использовать 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
Предполагая, что вы используете классы из коллекций Commons:
- Если вы используете
remove()
метод, вам не нужно ничего дополнительно удалять - В буфере хранятся ссылки на объекты, а не строки, поэтому он ограничен количеством выделенных слотов. В вашем случае вы можете добавить до 200 строк произвольной длины, ограниченных общим объемом памяти, доступным вашей программе, до заполнения буфера.
Как отметил Кумар, вам, вероятно, лучше использовать вместо этого классы очередей библиотеки времени выполнения Java, поскольку они обрабатывают синхронизацию для вас, в то время как классы Commons Collections требуют, чтобы вы сами блокировали итератор.