Package ghidra.app.util.bin

# Class RangeMappedByteProvider

java.lang.Object
ghidra.app.util.bin.RangeMappedByteProvider

All Implemented Interfaces:
  `ByteProvider`, `Closeable`, `AutoCloseable`

public class RangeMappedByteProvider extends Object implements ByteProvider
A `ByteProvider` that is a concatenation of sub-ranges of another ByteProvider, also allowing for non-initialized (sparse) regions.

Not thread-safe when ranges are being added.

Does not assume ownership of wrapped ByteProvider.

- ## Field Summary

  ### Fields inherited from interface ghidra.app.util.bin.ByteProvider

  `EMPTY_BYTEPROVIDER`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `RangeMappedByteProvider(ByteProvider provider, FSRL fsrl)`
  Creates a new `RangeMappedByteProvider`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addRange(long offset, long rangeLen)`
  Adds a range to the current end of this instance.
  `void`
  `addSparseRange(long rangeLen)`
  Adds a sparse range to the current end of this instance.
  `void`
  `close()`
  Releases any resources the `ByteProvider` may have occupied
  `String`
  `getAbsolutePath()`
  Returns the absolute path (similar to, but not a, URI) to the `ByteProvider`.
  `File`
  `getFile()`
  Returns the underlying `File` for this `ByteProvider`, or null if this `ByteProvider` is not associated with a `File`.
  `FSRL`
  `getFSRL()`
  Returns the `FSRL` of the underlying file for this byte provider, or null if this byte provider is not associated with a file.
  `String`
  `getName()`
  Returns the name of the `ByteProvider`.
  `int`
  `getRangeCount()`
  Return the number of ranges.
  `boolean`
  `isValidIndex(long index)`
  Returns true if the specified index is valid.
  `long`
  `length()`
  Returns the length of the `ByteProvider`
  `byte`
  `readByte(long index)`
  Reads a byte at the specified index
  `int`
  `readBytes(long index, byte[] buffer, int offset, int len)`
  Read bytes at the specified index into the given byte array.
  `byte[]`
  `readBytes(long index, long longCount)`
  Reads a byte array at the specified index

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface ghidra.app.util.bin.ByteProvider

  `getInputStream, isEmpty`

- ## Constructor Details

  - ### RangeMappedByteProvider

    public RangeMappedByteProvider(ByteProvider provider, FSRL fsrl)
    Creates a new `RangeMappedByteProvider`.
    Parameters:
      `provider` - `ByteProvider` to wrap
      `fsrl` - `FSRL` of this new byte provider

- ## Method Details

  - ### addRange

    public void addRange(long offset, long rangeLen)
    Adds a range to the current end of this instance.

    If the new range immediately follows the previous range, the new range is merged into the previous entry.

    Parameters:
      `offset` - long byte offset in the delegate ByteProvider, -1 indicates a sparse range with no storage
      `rangeLen` - long length of the range in the delegate ByteProvider

  - ### addSparseRange

    public void addSparseRange(long rangeLen)
    Adds a sparse range to the current end of this instance.
    Parameters:
      `rangeLen` - long length of the sparse range

  - ### getRangeCount

    public int getRangeCount()
    Return the number of ranges. Adjacent ranges that were merged will count as a single range.
    Returns:
      number of ranges

  - ### getFile

    public File getFile()
    Description copied from interface: `ByteProvider`
    Returns the underlying `File` for this `ByteProvider`, or null if this `ByteProvider` is not associated with a `File`.
    Specified by:
      `getFile` in interface `ByteProvider`
    Returns:
      the underlying file for this byte provider

  - ### getName

    public String getName()
    Description copied from interface: `ByteProvider`
    Returns the name of the `ByteProvider`. For example, the underlying file name.
    Specified by:
      `getName` in interface `ByteProvider`
    Returns:
      the name of the `ByteProvider` or null if there is no name

  - ### getFSRL

    public FSRL getFSRL()
    Description copied from interface: `ByteProvider`
    Returns the `FSRL` of the underlying file for this byte provider, or null if this byte provider is not associated with a file.
    Specified by:
      `getFSRL` in interface `ByteProvider`
    Returns:
      The `FSRL` of the underlying `File`, or null if no associated `File`.

  - ### getAbsolutePath

    public String getAbsolutePath()
    Description copied from interface: `ByteProvider`
    Returns the absolute path (similar to, but not a, URI) to the `ByteProvider`. For example, the complete path to the file.
    Specified by:
      `getAbsolutePath` in interface `ByteProvider`
    Returns:
      the absolute path to the `ByteProvider` or null if not associated with a `File`.

  - ### length

    public long length() throws IOException
    Description copied from interface: `ByteProvider`
    Returns the length of the `ByteProvider`
    Specified by:
      `length` in interface `ByteProvider`
    Returns:
      the length of the `ByteProvider`
    Throws:
      `IOException` - if an I/O error occurs

  - ### isValidIndex

    public boolean isValidIndex(long index)
    Description copied from interface: `ByteProvider`
    Returns true if the specified index is valid.
    Specified by:
      `isValidIndex` in interface `ByteProvider`
    Parameters:
      `index` - the index in the byte provider to check
    Returns:
      true if the specified index is valid

  - ### close

    public void close() throws IOException
    Description copied from interface: `ByteProvider`
    Releases any resources the `ByteProvider` may have occupied
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `ByteProvider`
    Specified by:
      `close` in interface `Closeable`
    Throws:
      `IOException` - if an I/O error occurs

  - ### readByte

    public byte readByte(long index) throws IOException
    Description copied from interface: `ByteProvider`
    Reads a byte at the specified index
    Specified by:
      `readByte` in interface `ByteProvider`
    Parameters:
      `index` - the index of the byte to read
    Returns:
      the byte read from the specified index
    Throws:
      `IOException` - if an I/O error occurs

  - ### readBytes

    public byte[] readBytes(long index, long longCount) throws IOException
    Description copied from interface: `ByteProvider`
    Reads a byte array at the specified index
    Specified by:
      `readBytes` in interface `ByteProvider`
    Parameters:
      `index` - the index of the byte to read
      `longCount` - the number of bytes to read
    Returns:
      the byte array read from the specified index
    Throws:
      `IOException` - if an I/O error occurs

  - ### readBytes

    public int readBytes(long index, byte[] buffer, int offset, int len) throws IOException
    Read bytes at the specified index into the given byte array.

    See `InputStream.read(byte[], int, int)`.

    Parameters:
      `index` - file offset to start reading
      `buffer` - byte array that will receive the bytes
      `offset` - offset inside the byte array to place the bytes
      `len` - number of bytes to read
    Returns:
      number of actual bytes read
    Throws:
      `IOException` - if error