in encryption/src/main/java/org/apache/solr/encryption/crypto/DecryptingIndexInput.java [146:164]
public void seek(long position) throws IOException {
if (position < 0) {
throw new IllegalArgumentException("Invalid position=" + position);
}
if (position > length()) {
throw new EOFException("Seek beyond EOF (position=" + position + ", length=" + length() + ") in " + this);
}
long targetPosition = position + sliceOffset;
long delegatePosition = indexInput.getFilePointer();
long currentPosition = delegatePosition - outBuffer.remaining();
if (targetPosition >= currentPosition && targetPosition <= delegatePosition) {
// The target position is within the buffered output. Just move the output buffer position.
outBuffer.position(outBuffer.position() + (int) (targetPosition - currentPosition));
assert targetPosition == delegatePosition - outBuffer.remaining();
} else {
indexInput.seek(targetPosition);
setPosition(targetPosition);
}
}