constructor (file, { start, end }) {
    super()

    this._torrent = file._torrent

    this._pieceLength = file._torrent.pieceLength

    this._startPiece = (start + file.offset) / this._pieceLength | 0
    this._endPiece = (end + file.offset) / this._pieceLength | 0

    this._piece = this._startPiece
    this._offset = (start + file.offset) - (this._startPiece * this._pieceLength)

    this._missing = end - start + 1
    this._criticalLength = Math.min((1024 * 1024 / this._pieceLength) | 0, 2)

    this._torrent._select(this._startPiece, this._endPiece, 1, null, true)
    this.destroyed = false
  }
Async iterator of a torrent file

@param {File} file
@param {Object} opts
@param {number} opts.start iterator slice of file, starting from this byte (inclusive)
@param {number} opts.end iterator slice of file, ending with this byte (inclusive)
@implements {AsyncIterator<Uint8Array>}