@Override
  public <R, E extends Throwable> R readHeader(final @NotNull HeaderReader<R, E> reader) throws E, IOException {
    try (final Page page = storage.pageByOffset(0, /*forWrite: */false)) {
      page.lockPageForRead();
      try {
        return reader.readHeader(headerAccessor);
      }
      finally {
        page.unlockPageForRead();
      }
    }
  }
@Override
  public <R, E extends Throwable> R readHeader(final @NotNull HeaderReader<R, E> reader)