currentReadPosition += limit;
readTasks.add(ListenableFutureTask.create(new Callable<ByteBuffer>() {
@Override
public ByteBuffer call() throws Exception {
final ByteBuffer buffer = availableBuffers.take();
buffer.clear();
buffer.limit(limit);
while (buffer.hasRemaining()) {
int read = channel.read(buffer, readStartingAt);
if (read == -1) {
throw new EOFException();