Class SeekableInputStream

    • Field Summary

      Fields 
      Modifier and Type Field Description
      (package private) boolean closed  
      (package private) long flushedPosition  
      protected java.util.Stack<java.lang.Long> markedPositions  
      (package private) long position
      The stream position in this stream
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      protected void checkOpen()  
      void close()
      Closes the stream.
      protected abstract void closeImpl()  
      protected void finalize()
      Finalizes this object prior to garbage collection.
      void flush()
      Discards the initial position of the stream prior to the current stream position.
      void flushBefore​(long pPosition)
      Discards the initial portion of the stream prior to the indicated postion.
      protected abstract void flushBeforeImpl​(long pPosition)
      Discards the initial portion of the stream prior to the indicated postion.
      long getFlushedPosition()
      Returns the earliest position in the stream to which seeking may be performed.
      long getStreamPosition()
      Returns the current byte position of the stream.
      void mark()
      Marks a position in the stream to be returned to by a subsequent call to reset.
      void mark​(int pLimit)  
      boolean markSupported()
      Returns true, as marking is always supported.
      int read​(byte[] pBytes)  
      void reset()
      Returns the file pointer to its previous position, at the time of the most recent unmatched call to mark.
      void seek​(long pPosition)
      Sets the current stream position to the desired location.
      protected abstract void seekImpl​(long pPosition)  
      long skip​(long pLength)
      Implemented using seek(currentPos + pLength).
      • Methods inherited from class java.io.InputStream

        available, nullInputStream, read, read, readAllBytes, readNBytes, readNBytes, transferTo
      • Methods inherited from class java.lang.Object

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

      • position

        long position
        The stream position in this stream
      • flushedPosition

        long flushedPosition
      • closed

        boolean closed
      • markedPositions

        protected java.util.Stack<java.lang.Long> markedPositions
    • Constructor Detail

      • SeekableInputStream

        public SeekableInputStream()
    • Method Detail

      • read

        public final int read​(byte[] pBytes)
                       throws java.io.IOException
        Overrides:
        read in class java.io.InputStream
        Throws:
        java.io.IOException
      • skip

        public final long skip​(long pLength)
                        throws java.io.IOException
        Implemented using seek(currentPos + pLength).
        Overrides:
        skip in class java.io.InputStream
        Parameters:
        pLength - the number of bytes to skip
        Returns:
        the actual number of bytes skipped (may be equal to or less than pLength)
        Throws:
        java.io.IOException - if an I/O exception occurs during skip
      • mark

        public final void mark​(int pLimit)
        Overrides:
        mark in class java.io.InputStream
      • markSupported

        public final boolean markSupported()
        Returns true, as marking is always supported.
        Overrides:
        markSupported in class java.io.InputStream
        Returns:
        true.
      • seek

        public final void seek​(long pPosition)
                        throws java.io.IOException
        Description copied from interface: Seekable
        Sets the current stream position to the desired location. The next read will occur at this location.

        An IndexOutOfBoundsException will be thrown if pPosition is smaller than the flushed position (as returned by Seekable.getFlushedPosition()).

        It is legal to seek past the end of the file; an EOFException will be thrown only if a read is performed.

        Specified by:
        seek in interface Seekable
        Parameters:
        pPosition - a long containing the desired file pointer position.
        Throws:
        java.io.IOException - if any other I/O error occurs.
      • seekImpl

        protected abstract void seekImpl​(long pPosition)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • mark

        public final void mark()
        Description copied from interface: Seekable
        Marks a position in the stream to be returned to by a subsequent call to reset. Unlike a standard InputStream, all Seekable streams upport marking. Additionally, calls to mark and reset may be nested arbitrarily.

        Unlike the mark methods declared by the Reader or InputStream interfaces, no readLimit parameter is used. An arbitrary amount of data may be read following the call to mark.

        Specified by:
        mark in interface Seekable
      • reset

        public final void reset()
                         throws java.io.IOException
        Description copied from interface: Seekable
        Returns the file pointer to its previous position, at the time of the most recent unmatched call to mark.

        Calls to reset without a corresponding call to mark will either:

        • throw an IOException
        • or, reset to the beginning of the stream.

        An IOException will be thrown if the previous marked position lies in the discarded portion of the stream.

        Specified by:
        reset in interface Seekable
        Overrides:
        reset in class java.io.InputStream
        Throws:
        java.io.IOException - if an I/O error occurs.
        See Also:
        InputStream.reset()
      • flushBefore

        public final void flushBefore​(long pPosition)
                               throws java.io.IOException
        Description copied from interface: Seekable
        Discards the initial portion of the stream prior to the indicated postion. Attempting to seek to an offset within the flushed portion of the stream will result in an IndexOutOfBoundsException.

        Calling flushBefore may allow classes implementing this interface to free up resources such as memory or disk space that are being used to store data from the stream.

        Specified by:
        flushBefore in interface Seekable
        Parameters:
        pPosition - a long containing the length of the file prefix that may be flushed.
        Throws:
        java.io.IOException - if an I/O error occurs.
      • flushBeforeImpl

        protected abstract void flushBeforeImpl​(long pPosition)
                                         throws java.io.IOException
        Discards the initial portion of the stream prior to the indicated postion.
        Parameters:
        pPosition - the position to flush to
        Throws:
        java.io.IOException - if an I/O exception occurs during the flush operation
        See Also:
        flushBefore(long)
      • flush

        public final void flush()
                         throws java.io.IOException
        Description copied from interface: Seekable
        Discards the initial position of the stream prior to the current stream position. Equivalent to flushBefore(getStreamPosition()).
        Specified by:
        flush in interface Seekable
        Throws:
        java.io.IOException - if an I/O error occurs.
      • getFlushedPosition

        public final long getFlushedPosition()
                                      throws java.io.IOException
        Description copied from interface: Seekable
        Returns the earliest position in the stream to which seeking may be performed. The returned value will be the maximum of all values passed into previous calls to flushBefore.
        Specified by:
        getFlushedPosition in interface Seekable
        Returns:
        the earliest legal position for seeking, as a long.
        Throws:
        java.io.IOException - if an I/O error occurs.
      • getStreamPosition

        public final long getStreamPosition()
                                     throws java.io.IOException
        Description copied from interface: Seekable
        Returns the current byte position of the stream. The next read will take place starting at this offset.
        Specified by:
        getStreamPosition in interface Seekable
        Returns:
        a long containing the position of the stream.
        Throws:
        java.io.IOException - if an I/O error occurs.
      • checkOpen

        protected final void checkOpen()
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • close

        public final void close()
                         throws java.io.IOException
        Description copied from interface: Seekable
        Closes the stream.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in interface Seekable
        Overrides:
        close in class java.io.InputStream
        Throws:
        java.io.IOException - if the stream can't be closed.
      • closeImpl

        protected abstract void closeImpl()
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • finalize

        protected void finalize()
                         throws java.lang.Throwable
        Finalizes this object prior to garbage collection. The close method is called to close any open input source. This method should not be called from application code.
        Overrides:
        finalize in class java.lang.Object
        Throws:
        java.lang.Throwable - if an error occurs during superclass finalization.