@NotThreadSafe public class ResettableInputStream extends ReleasableInputStream
ResettableInputStream
allows the close operation to
be disabled via ReleasableInputStream.disableClose()
(to avoid accidentally being closed).
This is necessary when such input stream needs to be marked-and-reset
multiple times but only as long as the stream has not been closed.
The creator of this input stream should therefore always call
ReleasableInputStream.release()
in a finally block to truly release the underlying
resources.
Releasable
Constructor and Description |
---|
ResettableInputStream(File file) |
ResettableInputStream(FileInputStream fis) |
Modifier and Type | Method and Description |
---|---|
int |
available() |
File |
getFile()
Returns the underlying file, if known; or null if not;
|
void |
mark(int unused)
Marks the current position in this input stream.
|
boolean |
markSupported() |
static ResettableInputStream |
newResettableInputStream(File file)
Convenient factory method to construct a new resettable input stream for
the given file, converting any IOException into SdkClientException.
|
static ResettableInputStream |
newResettableInputStream(FileInputStream fis)
Convenient factory method to construct a new resettable input stream for
the given file input stream, converting any IOException into
SdkClientException.
|
static ResettableInputStream |
newResettableInputStream(FileInputStream fis,
String errmsg)
Convenient factory method to construct a new resettable input stream for
the given file input stream, converting any IOException into
SdkClientException with the given error message.
|
static ResettableInputStream |
newResettableInputStream(File file,
String errmsg)
Convenient factory method to construct a new resettable input stream for
the given file, converting any IOException into SdkClientException
with the given error message.
|
int |
read() |
int |
read(byte[] arg0,
int arg1,
int arg2) |
void |
reset()
Repositions this stream to the position at the time the
mark method was last called on this input stream. |
long |
skip(long n) |
close, disableClose, isCloseDisabled, release, wrap
abort, getDelegateStream, isMetricActivated
read
public ResettableInputStream(File file) throws IOException
file
- must not be null. Upon successful construction the the file
will be opened with an input stream automatically marked at
the starting position of the given file.
Note the creation of a ResettableInputStream
would
entail physically opening a file. If the opened file is meant
to be closed only (in a finally block) by the very same code
block that created it, then it is necessary that the release
method must not be called while the execution is made in other
stack frames.
In such case, as other stack frames may inadvertently or
indirectly call the close method of the stream, the creator of
the stream would need to explicitly disable the accidental
closing via ReleasableInputStream.disableClose()
, so
that the release method becomes the only way to truly close
the opened file.
IOException
public ResettableInputStream(FileInputStream fis) throws IOException
fis
- file input stream; must not be null. Upon successful
construction the input stream will be automatically marked at
the current position of the given file input stream.
Note the creation of a ResettableInputStream
would entail
physically opening a file. If the opened file is meant to be closed only
(in a finally block) by the very same code block that created it, then it
is necessary that the release method must not be called while the
execution is made in other stack frames.
In such case, as other stack frames may inadvertently or indirectly call
the close method of the stream, the creator of the stream would need to
explicitly disable the accidental closing via
ReleasableInputStream.disableClose()
, so that the release method
becomes the only way to truly close the opened file.
IOException
public final boolean markSupported()
markSupported
in class SdkFilterInputStream
public void mark(int unused)
reset
method repositions this stream at the last marked
position so that subsequent reads re-read the same bytes.
This method works as long as the underlying file has not been closed.
Note the creation of a ResettableInputStream
would entail
physically opening a file. If the opened file is meant to be closed only
(in a finally block) by the very same code block that created it, then it
is necessary that the release method must not be called while the
execution is made in other stack frames.
In such case, as other stack frames may inadvertently or indirectly call
the close method of the stream, the creator of the stream would need to
explicitly disable the accidental closing via
ReleasableInputStream.disableClose()
, so that the release method
becomes the only way to truly close the opened file.
mark
in class SdkFilterInputStream
_
- ignoredpublic void reset() throws IOException
mark
method was last called on this input stream.
This method works as long as the underlying file has not been closed.
Note the creation of a ResettableInputStream
would entail
physically opening a file. If the opened file is meant to be closed only
(in a finally block) by the very same code block that created it, then it
is necessary that the release method must not be called while the
execution is made in other stack frames.
In such case, as other stack frames may inadvertently or indirectly call
the close method of the stream, the creator of the stream would need to
explicitly disable the accidental closing via
ReleasableInputStream.disableClose()
, so that the release method
becomes the only way to truly close the opened file.
reset
in class SdkFilterInputStream
IOException
public int available() throws IOException
available
in class SdkFilterInputStream
IOException
public int read() throws IOException
read
in class SdkFilterInputStream
IOException
public long skip(long n) throws IOException
skip
in class SdkFilterInputStream
IOException
public int read(byte[] arg0, int arg1, int arg2) throws IOException
read
in class SdkFilterInputStream
IOException
public File getFile()
public static ResettableInputStream newResettableInputStream(File file)
Note the creation of a ResettableInputStream
would entail
physically opening a file. If the opened file is meant to be closed only
(in a finally block) by the very same code block that created it, then it
is necessary that the release method must not be called while the
execution is made in other stack frames.
In such case, as other stack frames may inadvertently or indirectly call
the close method of the stream, the creator of the stream would need to
explicitly disable the accidental closing via
ReleasableInputStream.disableClose()
, so that the release method
becomes the only way to truly close the opened file.
public static ResettableInputStream newResettableInputStream(File file, String errmsg)
Note the creation of a ResettableInputStream
would entail
physically opening a file. If the opened file is meant to be closed only
(in a finally block) by the very same code block that created it, then it
is necessary that the release method must not be called while the
execution is made in other stack frames.
In such case, as other stack frames may inadvertently or indirectly call
the close method of the stream, the creator of the stream would need to
explicitly disable the accidental closing via
ReleasableInputStream.disableClose()
, so that the release method
becomes the only way to truly close the opened file.
public static ResettableInputStream newResettableInputStream(FileInputStream fis)
Note the creation of a ResettableInputStream
would entail
physically opening a file. If the opened file is meant to be closed only
(in a finally block) by the very same code block that created it, then it
is necessary that the release method must not be called while the
execution is made in other stack frames.
In such case, as other stack frames may inadvertently or indirectly call
the close method of the stream, the creator of the stream would need to
explicitly disable the accidental closing via
ReleasableInputStream.disableClose()
, so that the release method
becomes the only way to truly close the opened file.
public static ResettableInputStream newResettableInputStream(FileInputStream fis, String errmsg)
Note the creation of a ResettableInputStream
would entail
physically opening a file. If the opened file is meant to be closed only
(in a finally block) by the very same code block that created it, then it
is necessary that the release method must not be called while the
execution is made in other stack frames.
In such case, as other stack frames may inadvertently or indirectly call
the close method of the stream, the creator of the stream would need to
explicitly disable the accidental closing via
ReleasableInputStream.disableClose()
, so that the release method
becomes the only way to truly close the opened file.