@Override
  public SeekableInputStream newStream() {
    try {
      FutureDataInputStreamBuilder fsBuilder = fs.openFile(path);
      if (length != null) {
        LOG.debug("Using fs.option.openfile.length as {} for {}", length, location);
        fsBuilder.opt("fs.option.openfile.length", Long.toString(length));
      }
      LOG.debug("Explicitly using fs.s3a.experimental.input.fadvise as normal for {}", location);
      return HadoopStreams.wrap(
          FutureIO.awaitFuture(fsBuilder.opt("fs.s3a.experimental.input.fadvise", "normal").build()));
    } catch (FileNotFoundException e) {
      throw new NotFoundException(e, "Failed to open input stream for file: %s", path);
    } catch (IOException e) {
      throw new RuntimeIOException(e, "Failed to open input stream for file: %s", path);
    }
  }
{@link InputFile} implementation using the Hadoop {@link FileSystem} API.

<p>This class is based on Parquet's HadoopInputFile.
iceberg/patched-iceberg-core/src/main/java/org/apache/iceberg/hadoop/HadoopInputFile.java