Class DeflatingZstdEntityProducer
- java.lang.Object
-
- org.apache.hc.client5.http.async.methods.DeflatingZstdEntityProducer
-
- All Implemented Interfaces:
org.apache.hc.core5.http.EntityDetails,org.apache.hc.core5.http.nio.AsyncDataProducer,org.apache.hc.core5.http.nio.AsyncEntityProducer,org.apache.hc.core5.http.nio.ResourceHolder
public final class DeflatingZstdEntityProducer extends java.lang.Object implements org.apache.hc.core5.http.nio.AsyncEntityProducerAsyncEntityProducerthat compresses the bytes produced by a delegate entity into a single Zstandard (zstd) frame on the fly.This producer wraps a
AsyncEntityProducerand performs streaming, ByteBuffer-to-ByteBuffer compression as the delegate writes to the providedDataStreamChannel. NoInputStreamis used in the client pipeline.Metadata reported by this producer:
getContentEncoding()returns"zstd".getContentLength()returns-1(unknown after compression).isChunked()returnstrue(requests are typically sent chunked).
Behavior
- Streaming & back-pressure: compressed output is staged in direct
ByteBuffers and written only when the channel accepts bytes. WhenDataStreamChannel.write(...)returns0, the producer pauses and requests another output turn. - Finalization: after the delegate signals
endStream(), this producer emits the zstd frame epilogue and then callsDataStreamChannel.endStream(). - Repeatability: repeatable only if the delegate is repeatable.
- Headers: callers are responsible for sending
Content-Encoding: zstdon the request if required by the server. Content length is not known in advance. - Resources: invoke
releaseResources()to free native compressor resources.
Constructors
DeflatingZstdEntityProducer(delegate)– uses a default compression level.DeflatingZstdEntityProducer(delegate, level)– explicitly sets the zstd level.
Thread-safety
Not thread-safe; one instance per message exchange.
Runtime dependency
Requires
com.github.luben:zstd-jnion the classpath.- Since:
- 5.6
- See Also:
InflatingZstdDataConsumer,BasicRequestProducer,StringAsyncEntityProducer,ContentCompressionAsyncExec
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classDeflatingZstdEntityProducer.Inner
-
Field Summary
Fields Modifier and Type Field Description private org.apache.hc.core5.http.nio.AsyncEntityProducerdelegateprivate booleanfinishedprivate static intIN_BUFprivate java.nio.ByteBufferinDirectDirect staging for heap inputs.private intlevelprivate static intOUT_BUF_DEFAULTprivate java.nio.ByteBufferoutBufCurrent output buffer owned by zstd; replaced when it overflows or flushes.private intoutCapprivate java.util.Deque<java.nio.ByteBuffer>pendingPending compressed output buffers, ready to write (pos=0..limit).private java.util.concurrent.atomic.AtomicBooleanreleasedprivate booleanupstreamEndedprivate com.github.luben.zstd.ZstdDirectBufferCompressingStreamzstreamZstd compressor stream.
-
Constructor Summary
Constructors Constructor Description DeflatingZstdEntityProducer(org.apache.hc.core5.http.nio.AsyncEntityProducer delegate)DeflatingZstdEntityProducer(org.apache.hc.core5.http.nio.AsyncEntityProducer delegate, int level)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intavailable()private intcompressFrom(java.nio.ByteBuffer src)Compress the bytes insrc(may be heap or direct).private voidensureStreamInitialized()voidfailed(java.lang.Exception cause)private booleanflushPending(org.apache.hc.core5.http.nio.DataStreamChannel chan)Try to write as much of the pending compressed data as the channel accepts.java.lang.StringgetContentEncoding()longgetContentLength()java.lang.StringgetContentType()java.util.Set<java.lang.String>getTrailerNames()booleanisChunked()booleanisRepeatable()voidproduce(org.apache.hc.core5.http.nio.DataStreamChannel chan)voidreleaseResources()
-
-
-
Field Detail
-
IN_BUF
private static final int IN_BUF
- See Also:
- Constant Field Values
-
OUT_BUF_DEFAULT
private static final int OUT_BUF_DEFAULT
- See Also:
- Constant Field Values
-
delegate
private final org.apache.hc.core5.http.nio.AsyncEntityProducer delegate
-
inDirect
private final java.nio.ByteBuffer inDirect
Direct staging for heap inputs.
-
pending
private final java.util.Deque<java.nio.ByteBuffer> pending
Pending compressed output buffers, ready to write (pos=0..limit).
-
outBuf
private java.nio.ByteBuffer outBuf
Current output buffer owned by zstd; replaced when it overflows or flushes.
-
zstream
private com.github.luben.zstd.ZstdDirectBufferCompressingStream zstream
Zstd compressor stream.
-
upstreamEnded
private volatile boolean upstreamEnded
-
finished
private volatile boolean finished
-
released
private final java.util.concurrent.atomic.AtomicBoolean released
-
level
private final int level
-
outCap
private final int outCap
-
-
Method Detail
-
isRepeatable
public boolean isRepeatable()
- Specified by:
isRepeatablein interfaceorg.apache.hc.core5.http.nio.AsyncEntityProducer
-
getContentLength
public long getContentLength()
- Specified by:
getContentLengthin interfaceorg.apache.hc.core5.http.EntityDetails
-
getContentType
public java.lang.String getContentType()
- Specified by:
getContentTypein interfaceorg.apache.hc.core5.http.EntityDetails
-
getContentEncoding
public java.lang.String getContentEncoding()
- Specified by:
getContentEncodingin interfaceorg.apache.hc.core5.http.EntityDetails
-
isChunked
public boolean isChunked()
- Specified by:
isChunkedin interfaceorg.apache.hc.core5.http.EntityDetails
-
getTrailerNames
public java.util.Set<java.lang.String> getTrailerNames()
- Specified by:
getTrailerNamesin interfaceorg.apache.hc.core5.http.EntityDetails
-
available
public int available()
- Specified by:
availablein interfaceorg.apache.hc.core5.http.nio.AsyncDataProducer
-
produce
public void produce(org.apache.hc.core5.http.nio.DataStreamChannel chan) throws java.io.IOException- Specified by:
producein interfaceorg.apache.hc.core5.http.nio.AsyncDataProducer- Throws:
java.io.IOException
-
ensureStreamInitialized
private void ensureStreamInitialized() throws java.io.IOException- Throws:
java.io.IOException
-
flushPending
private boolean flushPending(org.apache.hc.core5.http.nio.DataStreamChannel chan) throws java.io.IOExceptionTry to write as much of the pending compressed data as the channel accepts.- Throws:
java.io.IOException
-
compressFrom
private int compressFrom(java.nio.ByteBuffer src) throws java.io.IOExceptionCompress the bytes insrc(may be heap or direct).- Throws:
java.io.IOException
-
failed
public void failed(java.lang.Exception cause)
- Specified by:
failedin interfaceorg.apache.hc.core5.http.nio.AsyncEntityProducer
-
releaseResources
public void releaseResources()
- Specified by:
releaseResourcesin interfaceorg.apache.hc.core5.http.nio.ResourceHolder
-
-