Class GzipAvailabilityInputStream
java.lang.Object
java.io.InputStream
java.io.FilterInputStream
software.amazon.awssdk.core.internal.io.GzipAvailabilityInputStream
- All Implemented Interfaces:
Closeable,AutoCloseable,Releasable
@SdkInternalApi
public final class GzipAvailabilityInputStream
extends FilterInputStream
implements Releasable
Wraps a response body so
available() never returns 0 for gzip content while the stream is open.
GZIPInputStream treats a transient 0 from available() at a member boundary
as end of stream and stops, truncating concatenated gzip. Gzip is detected passively from the leading bytes
(1f 8b 08); non-gzip streams keep honest available().-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionintvoidclose()voidmark(int readlimit) intread()intread(byte[] b, int off, int len) voidrelease()Releases the allocated resource.voidreset()longskip(long n) static AbortableInputStreamwrap(InputStream content, Abortable abortable) Wraps a response body's content soavailable()is gzip-safe, while preservingabort()on the original stream.Methods inherited from class java.io.FilterInputStream
markSupported, read
-
Constructor Details
-
GzipAvailabilityInputStream
-
-
Method Details
-
wrap
Wraps a response body's content soavailable()is gzip-safe, while preservingabort()on the original stream. Applied by the SDK at the sync and async blocking-stream boundaries (where the caller'sGZIPInputStreamreads), so thatResponseInputStreamitself stays content-type agnostic. -
read
- Overrides:
readin classFilterInputStream- Throws:
IOException
-
read
- Overrides:
readin classFilterInputStream- Throws:
IOException
-
available
- Overrides:
availablein classFilterInputStream- Throws:
IOException
-
skip
- Overrides:
skipin classFilterInputStream- Throws:
IOException
-
mark
public void mark(int readlimit) - Overrides:
markin classFilterInputStream
-
reset
- Overrides:
resetin classFilterInputStream- Throws:
IOException
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classFilterInputStream- Throws:
IOException
-
release
public void release()Description copied from interface:ReleasableReleases 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, aCloseableresource 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
ResettableInputStreamwould 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:
releasein interfaceReleasable
-