Class SdkInputStream
- java.lang.Object
-
- java.io.InputStream
-
- software.amazon.awssdk.core.io.SdkInputStream
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
,Releasable
- Direct Known Subclasses:
AwsChunkedInputStream
public abstract class SdkInputStream extends InputStream implements Releasable
Base class for AWS Java SDK specificInputStream
.
-
-
Constructor Summary
Constructors Constructor Description SdkInputStream()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
abort()
Can be used to provide abortion logic prior to throwing the AbortedException.protected void
abortIfNeeded()
Aborts with subclass specific abortion logic executed if needed.protected abstract InputStream
getWrappedInputStream()
Returns the underlying input stream, if any, from the subclass; or null if there is no underlying input stream.void
release()
WARNING: Subclass that overrides this method must NOT call super.release() or else it would lead to infinite loop.-
Methods inherited from class java.io.InputStream
available, close, mark, markSupported, read, read, read, reset, skip
-
-
-
-
Method Detail
-
getWrappedInputStream
protected abstract InputStream getWrappedInputStream()
Returns the underlying input stream, if any, from the subclass; or null if there is no underlying input stream.
-
abortIfNeeded
protected final void abortIfNeeded()
Aborts with subclass specific abortion logic executed if needed. Note the interrupted status of the thread is cleared by this method.- Throws:
AbortedException
- if found necessary.
-
abort
protected void abort() throws IOException
Can be used to provide abortion logic prior to throwing the AbortedException. No-op by default.- Throws:
IOException
-
release
public void release()
WARNING: Subclass that overrides this method must NOT call super.release() or else it would lead to infinite loop.Releases the allocated resource. This method should not be called except by the caller who allocated the resource at the very top of the call stack. This allows, typically, a
Closeable
resource to be not unintentionally released owing to the calling of theCloseable.close()
methods by implementation deep down in the call stack.For example, 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 viaResettableInputStream#disableClose()
, so that the release method becomes the only way to truly close the opened file.- Specified by:
release
in interfaceReleasable
-
-