Home / Class/ HpackHuffmanDecoder Class — netty Architecture

HpackHuffmanDecoder Class — netty Architecture

Architecture documentation for the HpackHuffmanDecoder class in HpackHuffmanDecoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  75ae760e_009e_dc0c_af13_9cd0fad0853b["HpackHuffmanDecoder"]
  8d3d3201_5e1f_ff55_2d37_6e7ddf9465fb["HpackHuffmanDecoder.java"]
  75ae760e_009e_dc0c_af13_9cd0fad0853b -->|defined in| 8d3d3201_5e1f_ff55_2d37_6e7ddf9465fb
  ac035546_80f3_9c85_4d24_15310a48c014["HpackHuffmanDecoder()"]
  75ae760e_009e_dc0c_af13_9cd0fad0853b -->|method| ac035546_80f3_9c85_4d24_15310a48c014
  4640aa1f_f858_555f_6193_01f4a9427401["AsciiString()"]
  75ae760e_009e_dc0c_af13_9cd0fad0853b -->|method| 4640aa1f_f858_555f_6193_01f4a9427401
  7ab112f9_1f08_f8d9_4b84_1251288c391a["process()"]
  75ae760e_009e_dc0c_af13_9cd0fad0853b -->|method| 7ab112f9_1f08_f8d9_4b84_1251288c391a
  90e35007_ca12_f1f0_c231_aed4a6e3fc8b["processNibble()"]
  75ae760e_009e_dc0c_af13_9cd0fad0853b -->|method| 90e35007_ca12_f1f0_c231_aed4a6e3fc8b

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/HpackHuffmanDecoder.java lines 40–4736

final class HpackHuffmanDecoder implements ByteProcessor {

    /* Scroll to the bottom! */

    private static final byte HUFFMAN_COMPLETE = 1;
    private static final byte HUFFMAN_EMIT_SYMBOL = 1 << 1;
    private static final byte HUFFMAN_FAIL = 1 << 2;

    private static final int HUFFMAN_COMPLETE_SHIFT = HUFFMAN_COMPLETE << 8;
    private static final int HUFFMAN_EMIT_SYMBOL_SHIFT = HUFFMAN_EMIT_SYMBOL << 8;
    private static final int HUFFMAN_FAIL_SHIFT = HUFFMAN_FAIL << 8;

    /**
     * A table of byte tuples (state, flags, output).   They are packed together as:
     * <p>
     * state<<16 + flags<<8 + output
     */
    private static final int[] HUFFS = new int[] {
            // Node 0 (Root Node, never emits symbols.)
            4 << 16,
            5 << 16,
            7 << 16,
            8 << 16,
            11 << 16,
            12 << 16,
            16 << 16,
            19 << 16,
            25 << 16,
            28 << 16,
            32 << 16,
            35 << 16,
            42 << 16,
            49 << 16,
            57 << 16,
            (64 << 16) + (HUFFMAN_COMPLETE << 8),

            // Node 1
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 48,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 49,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 50,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 97,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 99,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 101,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 105,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 111,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 115,
            ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 116,
            13 << 16,
            14 << 16,
            17 << 16,
            18 << 16,
            20 << 16,
            21 << 16,

            // Node 2
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 48,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 49,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 50,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 97,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 99,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 101,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 105,
            (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111,
            (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 111,

            // Node 3
            (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48,
            (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48,
            (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48,
            (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 48,
            (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49,
            (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49,
            (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49,
            (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 49,

Frequently Asked Questions

What is the HpackHuffmanDecoder class?
HpackHuffmanDecoder is a class in the netty codebase, defined in codec-http2/src/main/java/io/netty/handler/codec/http2/HpackHuffmanDecoder.java.
Where is HpackHuffmanDecoder defined?
HpackHuffmanDecoder is defined in codec-http2/src/main/java/io/netty/handler/codec/http2/HpackHuffmanDecoder.java at line 40.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free