Class SeekableInputStream

java.lang.Object
java.io.InputStream
com.twelvemonkeys.io.SeekableInputStream
All Implemented Interfaces:
Seekable, Closeable, AutoCloseable
Direct Known Subclasses:
FileCacheSeekableStream, FileSeekableStream, MemoryCacheSeekableStream

public abstract class SeekableInputStream extends InputStream implements Seekable
Abstract base class for InputStreams implementing the Seekable interface.
Version:
$Id: //depot/branches/personal/haraldk/twelvemonkeys/release-2/twelvemonkeys-core/src/main/java/com/twelvemonkeys/io/SeekableInputStream.java#4 $
Author:
Harald Kuhr
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Stack<Long>
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected final void
     
    final void
    Closes the stream.
    protected abstract void
     
    protected void
    Finalizes this object prior to garbage collection.
    final void
    Discards the initial position of the stream prior to the current stream position.
    final 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.
    final long
    Returns the earliest position in the stream to which seeking may be performed.
    final long
    Returns the current byte position of the stream.
    final void
    Marks a position in the stream to be returned to by a subsequent call to reset.
    final void
    mark(int pLimit)
     
    final boolean
    Returns true, as marking is always supported.
    final int
    read(byte[] pBytes)
     
    final void
    Returns the file pointer to its previous position, at the time of the most recent unmatched call to mark.
    final void
    seek(long pPosition)
    Sets the current stream position to the desired location.
    protected abstract void
    seekImpl(long pPosition)
     
    final long
    skip(long pLength)
    Implemented using seek(currentPos + pLength).

    Methods inherited from class java.lang.Object

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

    Methods inherited from interface com.twelvemonkeys.io.Seekable

    isCached, isCachedFile, isCachedMemory
  • Field Details

    • markedPositions

      protected Stack<Long> markedPositions
  • Constructor Details

    • SeekableInputStream

      public SeekableInputStream()
  • Method Details

    • read

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

      public final long skip(long pLength) throws IOException
      Implemented using seek(currentPos + pLength).
      Overrides:
      skip in class 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:
      IOException - if an I/O exception occurs during skip
    • mark

      public final void mark(int pLimit)
      Overrides:
      mark in class InputStream
    • markSupported

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

      public final void seek(long pPosition) throws 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:
      IOException - if any other I/O error occurs.
    • seekImpl

      protected abstract void seekImpl(long pPosition) throws IOException
      Throws:
      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 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 InputStream
      Throws:
      IOException - if an I/O error occurs.
      See Also:
    • flushBefore

      public final void flushBefore(long pPosition) throws 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:
      IOException - if an I/O error occurs.
    • flushBeforeImpl

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

      public final void flush() throws 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:
      IOException - if an I/O error occurs.
    • getFlushedPosition

      public final long getFlushedPosition() throws 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:
      IOException - if an I/O error occurs.
    • getStreamPosition

      public final long getStreamPosition() throws 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:
      IOException - if an I/O error occurs.
    • checkOpen

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

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

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

      protected void finalize() throws 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 Object
      Throws:
      Throwable - if an error occurs during superclass finalization.