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.

  • Constructor Details

  • 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