long remainingInFile = fc.size()-offset;
long remainingInTargetBuffer = buffer.remaining(DirectByteBuffer.SS_FILE);
MappedByteBuffer buf = fc.map(MapMode.READ_ONLY, offset, Math.min(remainingInFile,remainingInTargetBuffer));
buffer.put(DirectByteBuffer.SS_FILE, buf);
} else {
fc.position(offset);
while (fc.position() < fc.size() && buffer.hasRemaining(DirectByteBuffer.SS_FILE))
buffer.read(DirectByteBuffer.SS_FILE,fc);
}