Class GZIPContentDecoder
- java.lang.Object
-
- org.eclipse.jetty.http.GZIPContentDecoder
-
- All Implemented Interfaces:
Destroyable
- Direct Known Subclasses:
GZIPContentDecoder
public class GZIPContentDecoder extends java.lang.Object implements Destroyable
Decoder for the "gzip" content encoding.
This decoder inflates gzip compressed data, and has been optimized for async usage with minimal data copies.
-
-
Constructor Summary
Constructors Constructor Description GZIPContentDecoder()
GZIPContentDecoder(int bufferSize)
GZIPContentDecoder(ByteBufferPool pool, int bufferSize)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.nio.ByteBuffer
acquire(int capacity)
java.nio.ByteBuffer
decode(java.nio.ByteBuffer compressed)
Inflates compressed data from a buffer.protected void
decodeChunks(java.nio.ByteBuffer compressed)
Inflates compressed data.protected boolean
decodedChunk(java.nio.ByteBuffer chunk)
Called when a chunk of data is inflated.void
destroy()
boolean
isFinished()
void
release(java.nio.ByteBuffer buffer)
Releases an allocated buffer.
-
-
-
Constructor Detail
-
GZIPContentDecoder
public GZIPContentDecoder()
-
GZIPContentDecoder
public GZIPContentDecoder(int bufferSize)
-
GZIPContentDecoder
public GZIPContentDecoder(ByteBufferPool pool, int bufferSize)
-
-
Method Detail
-
decode
public java.nio.ByteBuffer decode(java.nio.ByteBuffer compressed)
Inflates compressed data from a buffer.
The buffers returned by this method should be released via
release(ByteBuffer)
.This method may fully consume the input buffer, but return only a chunk of the inflated bytes, to allow applications to consume the inflated chunk before performing further inflation, applying backpressure. In this case, this method should be invoked again with the same input buffer (even if it's already fully consumed) and that will produce another chunk of inflated bytes. Termination happens when the input buffer is fully consumed, and the returned buffer is empty.
See
decodedChunk(ByteBuffer)
to perform inflating in a non-blocking way that allows to apply backpressure.- Parameters:
compressed
- the buffer containing compressed data.- Returns:
- a buffer containing inflated data.
-
decodedChunk
protected boolean decodedChunk(java.nio.ByteBuffer chunk)
Called when a chunk of data is inflated.
The default implementation aggregates all the chunks into a single buffer returned from
decode(ByteBuffer)
.Derived implementations may choose to consume inflated chunks individually and return
true
from this method to prevent further inflation until a subsequent call todecode(ByteBuffer)
ordecodeChunks(ByteBuffer)
is made.- Parameters:
chunk
- the inflated chunk of data- Returns:
- false if inflating should continue, or true if the call
to
decodeChunks(ByteBuffer)
ordecode(ByteBuffer)
should return, allowing to consume the inflated chunk and apply backpressure
-
decodeChunks
protected void decodeChunks(java.nio.ByteBuffer compressed)
Inflates compressed data.
Inflation continues until the compressed block end is reached, there is no more compressed data or a call to
decodedChunk(ByteBuffer)
returns true.- Parameters:
compressed
- the buffer of compressed data to inflate
-
destroy
public void destroy()
- Specified by:
destroy
in interfaceDestroyable
-
isFinished
public boolean isFinished()
-
acquire
public java.nio.ByteBuffer acquire(int capacity)
- Parameters:
capacity
- capacity of the ByteBuffer to acquire- Returns:
- a heap buffer of the configured capacity either from the pool or freshly allocated.
-
release
public void release(java.nio.ByteBuffer buffer)
Releases an allocated buffer.
This method calls
ByteBufferPool.release(ByteBuffer)
if a buffer pool has been configured.This method should be called once for all buffers returned from
decode(ByteBuffer)
or passed todecodedChunk(ByteBuffer)
.- Parameters:
buffer
- the buffer to release.
-
-