Class RangeMappedByteProvider

  • All Implemented Interfaces:
    ByteProvider, java.io.Closeable, java.lang.AutoCloseable

    public class RangeMappedByteProvider
    extends java.lang.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.

    • Method Detail

      • 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 java.io.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 java.lang.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 java.lang.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 java.io.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:
        java.io.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 java.io.IOException
        Description copied from interface: ByteProvider
        Releases any resources the ByteProvider may have occupied
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface ByteProvider
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException - if an I/O error occurs
      • readByte

        public byte readByte​(long index)
                      throws java.io.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:
        java.io.IOException - if an I/O error occurs
      • readBytes

        public byte[] readBytes​(long index,
                                long longCount)
                         throws java.io.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:
        java.io.IOException - if an I/O error occurs
      • readBytes

        public int readBytes​(long index,
                             byte[] buffer,
                             int offset,
                             int len)
                      throws java.io.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:
        java.io.IOException - if error