remainLen > stepSize ? stepSize : remainLen;
long offsetBegin = fileLen - remainLen;
long offsetEnd = offsetBegin + splitBytes;
int indexBegin = getStartBlockIndex(startOffsets, offsetBegin);
int indexEnd = getEndBlockIndex(startOffsets, offsetEnd);
BlockLocation firstBlock = locations[indexBegin];
BlockLocation lastBlock = locations[indexEnd-1];
long lastBlockOffsetBegin = lastBlock.getOffset();
long lastBlockOffsetEnd =
lastBlockOffsetBegin + lastBlock.getLength();
if ((firstBlock.getOffset() > offsetBegin)
|| (lastBlockOffsetEnd < offsetEnd)) {
throw new AssertionError(
"Block locations returned by getFileBlockLocations do not cover requested range");
}