Class RandomAccessReadView

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

    public class RandomAccessReadView
    extends java.lang.Object
    implements RandomAccessRead
    This class provides a view of a part of a random access read. It clips the section starting at the given start position with the given length into a new random access read.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void checkClosed()
      Ensure that that the view isn't closed.
      void close()
      RandomAccessReadView createView​(long startPosition, long streamLength)
      Creates a random access read view starting at the given position with the given length.
      long getPosition()
      Returns offset of next byte to be returned by a read method.
      boolean isClosed()
      Returns true if this source has been closed.
      boolean isEOF()
      A simple test to see if we are at the end of the data.
      long length()
      The total number of bytes that are available.
      int read()
      Read a single byte of data.
      int read​(byte[] b, int off, int len)
      Read a buffer of data.
      private void restorePosition()
      Restore the current position within the underlying random access read.
      void rewind​(int bytes)
      Seek backwards the given number of bytes.
      void seek​(long newOffset)
      Seek to a position in the data.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • startPosition

        private final long startPosition
      • streamLength

        private final long streamLength
      • closeInput

        private final boolean closeInput
      • currentPosition

        private long currentPosition
    • Constructor Detail

      • RandomAccessReadView

        public RandomAccessReadView​(RandomAccessRead randomAccessRead,
                                    long startPosition,
                                    long streamLength)
        Constructor.
        Parameters:
        randomAccessRead - the underlying random access read
        startPosition - start position within the underlying random access read
        streamLength - stream length
      • RandomAccessReadView

        public RandomAccessReadView​(RandomAccessRead randomAccessRead,
                                    long startPosition,
                                    long streamLength,
                                    boolean closeInput)
        Constructor.
        Parameters:
        randomAccessRead - the underlying random access read
        startPosition - start position within the underlying random access read
        streamLength - stream length
        closeInput - close the underlying random access read when closing the view if set to true
    • Method Detail

      • getPosition

        public long getPosition()
                         throws java.io.IOException
        Returns offset of next byte to be returned by a read method.
        Specified by:
        getPosition in interface RandomAccessRead
        Returns:
        offset of next byte which will be returned with next RandomAccessRead.read() (if no more bytes are left it returns a value >= length of source)
        Throws:
        java.io.IOException - If there was an error while getting the current position
      • seek

        public void seek​(long newOffset)
                  throws java.io.IOException
        Seek to a position in the data.
        Specified by:
        seek in interface RandomAccessRead
        Parameters:
        newOffset - The position to seek to.
        Throws:
        java.io.IOException - If there is an error while seeking.
      • read

        public int read()
                 throws java.io.IOException
        Read a single byte of data.
        Specified by:
        read in interface RandomAccessRead
        Returns:
        The byte of data that is being read.
        Throws:
        java.io.IOException - If there is an error while reading the data.
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        Read a buffer of data.
        Specified by:
        read in interface RandomAccessRead
        Parameters:
        b - The buffer to write the data to.
        off - Offset into the buffer to start writing.
        len - The amount of data to attempt to read.
        Returns:
        The number of bytes that were actually read.
        Throws:
        java.io.IOException - If there was an error while reading the data.
      • length

        public long length()
                    throws java.io.IOException
        The total number of bytes that are available.
        Specified by:
        length in interface RandomAccessRead
        Returns:
        The number of bytes available.
        Throws:
        java.io.IOException - If there is an IO error while determining the length of the data stream.
      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException
      • isClosed

        public boolean isClosed()
        Returns true if this source has been closed.
        Specified by:
        isClosed in interface RandomAccessRead
        Returns:
        true if the source has been closed
      • rewind

        public void rewind​(int bytes)
                    throws java.io.IOException
        Seek backwards the given number of bytes.
        Specified by:
        rewind in interface RandomAccessRead
        Parameters:
        bytes - the number of bytes to be seeked backwards
        Throws:
        java.io.IOException - If there is an error while seeking
      • isEOF

        public boolean isEOF()
                      throws java.io.IOException
        A simple test to see if we are at the end of the data.
        Specified by:
        isEOF in interface RandomAccessRead
        Returns:
        true if we are at the end of the data.
        Throws:
        java.io.IOException - If there is an error reading the next byte.
      • restorePosition

        private void restorePosition()
                              throws java.io.IOException
        Restore the current position within the underlying random access read.
        Throws:
        java.io.IOException
      • checkClosed

        private void checkClosed()
                          throws java.io.IOException
        Ensure that that the view isn't closed.
        Throws:
        java.io.IOException - If RandomAccessReadView already closed
      • createView

        public RandomAccessReadView createView​(long startPosition,
                                               long streamLength)
                                        throws java.io.IOException
        Description copied from interface: RandomAccessRead
        Creates a random access read view starting at the given position with the given length.
        Specified by:
        createView in interface RandomAccessRead
        Parameters:
        startPosition - start position within the underlying random access read
        streamLength - stream length
        Returns:
        the random access read view
        Throws:
        java.io.IOException - if something went wrong when creating the view for the RandomAccessRead