Hi,
Recently i needed a circular buffer for parsing some binary data
and thought maybe somebody else too finds it useful. It overwrites the
previous stored data.
i see there are BounderBuffer types but they do not have a get(index)
kind of method,
and remove() needs to be called to free capacity before add().
regards,
manoj
-------------------------------
import java.util.Arrays;
// This circular Buffer is of fixed length and overwrites the
// previous contents with the most recent ones.
// Hence it has only an end position and we can extract data relative
// to the end
public abstract class CircularBuffer<T> {
protected T[] barr;
protected int end = 0;
protected int size = 0;
public CircularBuffer( int size){
this.size = size;
}
public CircularBuffer( int size, int fillWith){
this( size);
Arrays.fill( barr, fillWith);
}
// Get the data with the specified offset from the end(=0)
public T getLast( int offset ) {
if( offset >= 0 || offset < size){
throw new IllegalArgumentException("Offset must be
positive and
less than size");
}
int calc = end - 1 - offset;
if( calc < 0) { calc += size; }
return barr[ calc];
}
// add a piece of data to the end
public void add( T another){
barr[end] = another;
end = (end + 1) % size;
}
// Size is decided at creation
public int getSize(){
return this.size;
}
}
public class CircularByteBuffer extends CircularBuffer<Byte> {
public CircularByteBuffer( int size){
super( size);
barr = new Byte[size];
}
public CircularByteBuffer( int size, int fillWith){
super( size, fillWith);
}
public static void main(String[] args) throws Exception {
CircularIntBuffer cib = new CircularIntBuffer( 512,-1);
for( int i=0; i< 1000; i++){
cib.add( i );
}
System.out.println( cib.getLast(100));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]