Class SeekableInputStream
- All Implemented Interfaces:
Seekable
,Closeable
,AutoCloseable
- Direct Known Subclasses:
AbstractCachedSeekableStream
,FileSeekableStream
,RandomAccessStream.InputStreamView
InputStream
s implementing the Seekable
interface.- Version:
- $Id: //depot/branches/personal/haraldk/twelvemonkeys/release-2/twelvemonkeys-core/src/main/java/com/twelvemonkeys/io/SeekableInputStream.java#4 $
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) boolean
(package private) long
(package private) long
The stream position in this stream -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected final void
final void
close()
Closes the stream.protected abstract void
protected void
finalize()
Finalizes this object prior to garbage collection.final void
flush()
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
mark()
Marks a position in the stream to be returned to by a subsequent call to reset.final void
mark
(int pLimit) final boolean
Returnstrue
, as marking is always supported.final int
read
(byte[] pBytes) final void
reset()
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 usingseek(currentPos + pLength)
.Methods inherited from class java.io.InputStream
available, nullInputStream, read, read, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
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
-
position
long positionThe stream position in this stream -
flushedPosition
long flushedPosition -
closed
boolean closed -
markedPositions
-
-
Constructor Details
-
SeekableInputStream
public SeekableInputStream()
-
-
Method Details
-
read
- Overrides:
read
in classInputStream
- Throws:
IOException
-
skip
Implemented usingseek(currentPos + pLength)
.- Overrides:
skip
in classInputStream
- 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 classInputStream
-
markSupported
public final boolean markSupported()Returnstrue
, as marking is always supported.- Overrides:
markSupported
in classInputStream
- Returns:
true
.
-
seek
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 bySeekable.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 interfaceSeekable
- Parameters:
pPosition
- a long containing the desired file pointer position.- Throws:
IOException
- if any other I/O error occurs.
-
seekImpl
- 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 standardInputStream
, allSeekable
streams upport marking. Additionally, calls tomark
andreset
may be nested arbitrarily.Unlike the
mark
methods declared by theReader
orInputStream
interfaces, noreadLimit
parameter is used. An arbitrary amount of data may be read following the call tomark
. -
reset
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 interfaceSeekable
- Overrides:
reset
in classInputStream
- Throws:
IOException
- if an I/O error occurs.- See Also:
- throw an
-
flushBefore
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 anIndexOutOfBoundsException
.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 interfaceSeekable
- Parameters:
pPosition
- a long containing the length of the file prefix that may be flushed.- Throws:
IOException
- if an I/O error occurs.
-
flushBeforeImpl
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
Description copied from interface:Seekable
Discards the initial position of the stream prior to the current stream position. Equivalent toflushBefore(getStreamPosition())
.- Specified by:
flush
in interfaceSeekable
- Throws:
IOException
- if an I/O error occurs.
-
getFlushedPosition
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 toflushBefore
.- Specified by:
getFlushedPosition
in interfaceSeekable
- Returns:
- the earliest legal position for seeking, as a
long
. - Throws:
IOException
- if an I/O error occurs.
-
getStreamPosition
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 interfaceSeekable
- Returns:
- a
long
containing the position of the stream. - Throws:
IOException
- if an I/O error occurs.
-
checkOpen
- Throws:
IOException
-
close
Description copied from interface:Seekable
Closes the stream.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceSeekable
- Overrides:
close
in classInputStream
- Throws:
IOException
- if the stream can't be closed.
-
closeImpl
- Throws:
IOException
-
finalize
Finalizes this object prior to garbage collection. Theclose
method is called to close any open input source. This method should not be called from application code.
-