@Override
  public <OUT, E extends Exception> OUT read(final int startOffsetOnPage,
                                             final int length,
                                             final ThrowableNotNullFunction<ByteBuffer, OUT, E> reader) throws E {
    contentProtectingLock.readLock().lock();
    try {
      checkPageIsValidForAccess();

      //RC: need to upgrade language level to 13 to use .slice(index, length)
      final ByteBuffer slice = data.duplicate()
        .order(data.order())
        .asReadOnlyBuffer();
      slice.position(startOffsetOnPage)
        .limit(startOffsetOnPage + length);
      return reader.fun(slice);
    }
    finally {
      contentProtectingLock.readLock().unlock();
    }
  }
@Override
  public <OUT, E extends Exception> OUT read(final int startOffsetOnPage,
                                             final int length,
                                             final ThrowableNotNullFunction<ByteBuffer, OUT, E> reader)