@Override
  public void get(final long offsetInFile,
                  final byte[] destination, final int offsetInArray, final int length) throws IOException {
    long currentOffsetInFile = offsetInFile;
    int currentOffsetInArray = offsetInArray;
    int remainingBytesToRead = length;

    while (remainingBytesToRead > 0) {
      final int pageIndex = toPageIndex(currentOffsetInFile);
      final int offsetInPage = toOffsetInPage(currentOffsetInFile);

      int bytesToRead = Math.min(remainingBytesToRead, pageSize - offsetInPage);
      try (final Page page = pageByIndex(pageIndex, /*forWrite: */ false)) {
        page.readToArray(destination, currentOffsetInArray, offsetInPage, bytesToRead);
      }

      remainingBytesToRead -= bytesToRead;
      currentOffsetInArray += bytesToRead;
      currentOffsetInFile += bytesToRead;
    }
  }
@Override
  public void get(final long offsetInFile,
                  final byte[] destination, final int offsetInArray, final int length)