package com.koushikdutta.async;
import java.nio.ByteBuffer;
public class FilteredDataSink extends BufferedDataSink {
public FilteredDataSink(DataSink sink) {
super(sink);
setMaxBuffer(0);
}
public ByteBufferList filter(ByteBufferList bb) {
return bb;
}
@Override
public final void write(ByteBuffer bb) {
// don't filter and write if currently buffering, unless we know
// that the buffer can fit the entirety of the filtered result
if (isBuffering() && getMaxBuffer() != Integer.MAX_VALUE)
return;
ByteBufferList list = new ByteBufferList();
byte[] bytes = new byte[bb.remaining()];
bb.get(bytes);
assert bb.remaining() == 0;
list.add(ByteBuffer.wrap(bytes));
ByteBufferList filtered = filter(list);
super.write(filtered, true);
}
@Override
public final void write(ByteBufferList bb) {
// don't filter and write if currently buffering, unless we know
// that the buffer can fit the entirety of the filtered result
if (isBuffering() && getMaxBuffer() != Integer.MAX_VALUE)
return;
ByteBufferList filtered = filter(bb);
assert bb == null || filtered == bb || bb.isEmpty();
super.write(filtered, true);
if (bb != null)
bb.recycle();
}
}