Class DeflatingBrotliEntityProducer
java.lang.Object
org.apache.hc.client5.http.async.methods.DeflatingBrotliEntityProducer
- 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 DeflatingBrotliEntityProducer
extends Object
implements org.apache.hc.core5.http.nio.AsyncEntityProducer
AsyncEntityProducer that Brotli-compresses bytes from an upstream producer
on the fly and writes the compressed stream to the target DataStreamChannel.
Purely async/streaming: no InputStream/OutputStream. Back-pressure is
honored via available() and the I/O reactor’s calls into produce(DataStreamChannel).
Trailers from the upstream producer are preserved and emitted once the compressed output
has been fully drained.
Content metadata
ReturnsContent-Encoding: br, Content-Length: -1 and chunked=true.
Repeatability matches the upstream producer.
Implementation notes
Uses Brotli4j’sEncoderJNI.Wrapper. JNI-owned output buffers are written directly
when possible; if the channel applies back-pressure, the unwritten tail is copied into
small pooled direct ByteBuffers to reduce allocation churn. Native
resources are released in releaseResources().
Ensure Brotli4jLoader.ensureAvailability() has been
called once at startup; this class also invokes it in a static initializer as a safeguard.
- Since:
- 5.6
- See Also:
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final com.aayushatharva.brotli4j.encoder.EncoderJNI.Wrapperprivate ByteBufferprivate List<? extends org.apache.hc.core5.http.Header> private final org.apache.hc.core5.http.nio.AsyncEntityProducer -
Constructor Summary
ConstructorsConstructorDescriptionDeflatingBrotliEntityProducer(org.apache.hc.core5.http.nio.AsyncEntityProducer upstream) Create a producer with sensible defaults (quality=5,lgwin=22,GENERIC).DeflatingBrotliEntityProducer(org.apache.hc.core5.http.nio.AsyncEntityProducer upstream, int quality, int lgwin, int modeInt) Convenience constructor mapping0=GENERIC, 1=TEXT, 2=FONT.DeflatingBrotliEntityProducer(org.apache.hc.core5.http.nio.AsyncEntityProducer upstream, int quality, int lgwin, com.aayushatharva.brotli4j.encoder.Encoder.Mode mode) Create a producer with explicit Brotli params. -
Method Summary
Modifier and TypeMethodDescriptionintprivate booleandrainEncoder(org.apache.hc.core5.http.nio.DataStreamChannel channel) voidprivate booleanflushPending(org.apache.hc.core5.http.nio.DataStreamChannel channel) longbooleanbooleanvoidproduce(org.apache.hc.core5.http.nio.DataStreamChannel channel) void
-
Field Details
-
upstream
private final org.apache.hc.core5.http.nio.AsyncEntityProducer upstream -
encoder
private final com.aayushatharva.brotli4j.encoder.EncoderJNI.Wrapper encoder -
pendingOut
-
pendingTrailers
-
state
-
-
Constructor Details
-
DeflatingBrotliEntityProducer
public DeflatingBrotliEntityProducer(org.apache.hc.core5.http.nio.AsyncEntityProducer upstream, int quality, int lgwin, com.aayushatharva.brotli4j.encoder.Encoder.Mode mode) throws IOException Create a producer with explicit Brotli params.- Parameters:
upstream- upstream entity producer whose bytes will be compressedquality- Brotli quality level (see brotli4j documentation)lgwin- Brotli window size log2 (see brotli4j documentation)mode- Brotli mode hint (GENERIC/TEXT/FONT)- Throws:
IOException- if the native encoder cannot be created- Since:
- 5.6
-
DeflatingBrotliEntityProducer
public DeflatingBrotliEntityProducer(org.apache.hc.core5.http.nio.AsyncEntityProducer upstream, int quality, int lgwin, int modeInt) throws IOException Convenience constructor mapping0=GENERIC, 1=TEXT, 2=FONT.- Throws:
IOException- Since:
- 5.6
-
DeflatingBrotliEntityProducer
public DeflatingBrotliEntityProducer(org.apache.hc.core5.http.nio.AsyncEntityProducer upstream) throws IOException Create a producer with sensible defaults (quality=5,lgwin=22,GENERIC).- Throws:
IOException- Since:
- 5.6
-
-
Method Details
-
getContentType
- Specified by:
getContentTypein interfaceorg.apache.hc.core5.http.EntityDetails
-
getContentEncoding
- Specified by:
getContentEncodingin interfaceorg.apache.hc.core5.http.EntityDetails
-
getContentLength
public long getContentLength()- Specified by:
getContentLengthin interfaceorg.apache.hc.core5.http.EntityDetails
-
isChunked
public boolean isChunked()- Specified by:
isChunkedin interfaceorg.apache.hc.core5.http.EntityDetails
-
getTrailerNames
-
isRepeatable
public boolean isRepeatable()- Specified by:
isRepeatablein interfaceorg.apache.hc.core5.http.nio.AsyncEntityProducer
-
available
public int available()- Specified by:
availablein interfaceorg.apache.hc.core5.http.nio.AsyncDataProducer
-
produce
- Specified by:
producein interfaceorg.apache.hc.core5.http.nio.AsyncDataProducer- Throws:
IOException
-
failed
- Specified by:
failedin interfaceorg.apache.hc.core5.http.nio.AsyncEntityProducer
-
releaseResources
public void releaseResources()- Specified by:
releaseResourcesin interfaceorg.apache.hc.core5.http.nio.ResourceHolder
-
flushPending
private boolean flushPending(org.apache.hc.core5.http.nio.DataStreamChannel channel) throws IOException - Throws:
IOException
-
drainEncoder
private boolean drainEncoder(org.apache.hc.core5.http.nio.DataStreamChannel channel) throws IOException - Throws:
IOException
-