BrotliDecoder Class — netty Architecture
Architecture documentation for the BrotliDecoder class in BrotliDecoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2["BrotliDecoder"] 0a121b81_03bc_60d8_823c_31cd46cc6e3d["BrotliDecoder.java"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|defined in| 0a121b81_03bc_60d8_823c_31cd46cc6e3d 59c95c1f_2221_3079_7eea_13222910da72["BrotliDecoder()"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|method| 59c95c1f_2221_3079_7eea_13222910da72 637f4f9e_6d96_c331_2d84_0f4d4d324eab["forwardOutput()"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|method| 637f4f9e_6d96_c331_2d84_0f4d4d324eab f133d60d_f296_abc5_dc2a_aac22a8d324d["State()"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|method| f133d60d_f296_abc5_dc2a_aac22a8d324d 04616cfa_11f1_d045_4bb0_45a17268e4e4["readBytes()"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|method| 04616cfa_11f1_d045_4bb0_45a17268e4e4 4addbdcb_bd51_ae68_28ce_b2c97152c144["handlerAdded()"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|method| 4addbdcb_bd51_ae68_28ce_b2c97152c144 d68fe015_2e70_f3f1_a869_c19569a7aa0e["decode()"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|method| d68fe015_2e70_f3f1_a869_c19569a7aa0e d6b8ee5c_6a6c_5d81_4de8_0dee3399800a["destroy()"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|method| d6b8ee5c_6a6c_5d81_4de8_0dee3399800a dbb31225_2500_63ae_0a1f_6ea587259da1["handlerRemoved0()"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|method| dbb31225_2500_63ae_0a1f_6ea587259da1 d675b3c4_e3bc_974b_f7ef_b0162851b371["channelInactive()"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|method| d675b3c4_e3bc_974b_f7ef_b0162851b371 6b2179dc_f429_a31b_7a59_e98ab0cb2023["channelReadComplete()"] 1ab91a77_63ab_e5b9_9f8e_8e15c08c74e2 -->|method| 6b2179dc_f429_a31b_7a59_e98ab0cb2023
Relationship Graph
Source Code
codec-compression/src/main/java/io/netty/handler/codec/compression/BrotliDecoder.java lines 33–186
public final class BrotliDecoder extends ByteToMessageDecoder {
private enum State {
DONE, NEEDS_MORE_INPUT, ERROR
}
static {
try {
Brotli.ensureAvailability();
} catch (Throwable throwable) {
throw new ExceptionInInitializerError(throwable);
}
}
private final int inputBufferSize;
private DecoderJNI.Wrapper decoder;
private boolean destroyed;
private boolean needsRead;
/**
* Creates a new BrotliDecoder with a default 8kB input buffer
*/
public BrotliDecoder() {
this(8 * 1024);
}
/**
* Creates a new BrotliDecoder
* @param inputBufferSize desired size of the input buffer in bytes
*/
public BrotliDecoder(int inputBufferSize) {
this.inputBufferSize = ObjectUtil.checkPositive(inputBufferSize, "inputBufferSize");
}
private void forwardOutput(ChannelHandlerContext ctx) {
ByteBuffer nativeBuffer = decoder.pull();
// nativeBuffer actually wraps brotli's internal buffer so we need to copy its content
ByteBuf copy = ctx.alloc().buffer(nativeBuffer.remaining());
copy.writeBytes(nativeBuffer);
needsRead = false;
ctx.fireChannelRead(copy);
}
private State decompress(ChannelHandlerContext ctx, ByteBuf input) {
for (;;) {
switch (decoder.getStatus()) {
case DONE:
return State.DONE;
case OK:
decoder.push(0);
break;
case NEEDS_MORE_INPUT:
if (decoder.hasOutput()) {
forwardOutput(ctx);
}
if (!input.isReadable()) {
return State.NEEDS_MORE_INPUT;
}
ByteBuffer decoderInputBuffer = decoder.getInputBuffer();
decoderInputBuffer.clear();
int readBytes = readBytes(input, decoderInputBuffer);
decoder.push(readBytes);
break;
case NEEDS_MORE_OUTPUT:
forwardOutput(ctx);
break;
default:
return State.ERROR;
}
}
}
private static int readBytes(ByteBuf in, ByteBuffer dest) {
int limit = Math.min(in.readableBytes(), dest.remaining());
ByteBuffer slice = dest.slice();
Source
Frequently Asked Questions
What is the BrotliDecoder class?
BrotliDecoder is a class in the netty codebase, defined in codec-compression/src/main/java/io/netty/handler/codec/compression/BrotliDecoder.java.
Where is BrotliDecoder defined?
BrotliDecoder is defined in codec-compression/src/main/java/io/netty/handler/codec/compression/BrotliDecoder.java at line 33.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free