code: public AsyncIterator<List<PageEntry>> iterator(@NonNull ByteArraySegment firstKey, boolean firstKeyInclusive,
                                                     @NonNull ByteArraySegment lastKey, boolean lastKeyInclusive, Duration fetchTimeout) {
          ensureInitialized();
          return new EntryIterator(firstKey, firstKeyInclusive, lastKey, lastKeyInclusive, this::locatePage, this.state.get().length, fetchTimeout);
      }
docs: Returns an {@link AsyncIterator} that will iterate through all the keys within the specified bounds. All iterated keys will
  be returned in lexicographic order (smallest to largest). See {@link ByteArrayComparator} for ordering details.
  
  @param firstKey          A ByteArraySegment representing the lower bound of the iteration.
  @param firstKeyInclusive If true, firstKey will be included in the iteration (if it exists in the index), otherwise
  it will not.
  @param lastKey           A ByteArraySegment representing the upper bound of the iteration.
  @param lastKeyInclusive  If true, lastKey will be included in the iteration (if it exists in the index), otherwise
  it will not.
  @param fetchTimeout      Timeout for each invocation of AsyncIterator.getNext().
  @return A new AsyncIterator instance.