Home / Class/ HpackHuffmanEncoder Class — netty Architecture

HpackHuffmanEncoder Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  cae44e7d_aecf_908f_00c9_c17c6337e81a["HpackHuffmanEncoder"]
  7831d134_08a0_9668_e311_0bec636e63e0["HpackHuffmanEncoder.java"]
  cae44e7d_aecf_908f_00c9_c17c6337e81a -->|defined in| 7831d134_08a0_9668_e311_0bec636e63e0
  d4456e46_78e6_a206_c855_efd69eb73221["HpackHuffmanEncoder()"]
  cae44e7d_aecf_908f_00c9_c17c6337e81a -->|method| d4456e46_78e6_a206_c855_efd69eb73221
  1d7e7b35_132b_b895_c2f2_b87999561c33["encode()"]
  cae44e7d_aecf_908f_00c9_c17c6337e81a -->|method| 1d7e7b35_132b_b895_c2f2_b87999561c33
  a54721bd_7360_1db2_6a09_174e3c7cf119["encodeSlowPath()"]
  cae44e7d_aecf_908f_00c9_c17c6337e81a -->|method| a54721bd_7360_1db2_6a09_174e3c7cf119
  a0bedc70_1fd9_1e93_3516_3c2bb38e58e0["getEncodedLength()"]
  cae44e7d_aecf_908f_00c9_c17c6337e81a -->|method| a0bedc70_1fd9_1e93_3516_3c2bb38e58e0
  9f7145af_9dcb_8ab7_e1f4_bb73e42ff31a["getEncodedLengthSlowPath()"]
  cae44e7d_aecf_908f_00c9_c17c6337e81a -->|method| 9f7145af_9dcb_8ab7_e1f4_bb73e42ff31a

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/HpackHuffmanEncoder.java lines 40–194

final class HpackHuffmanEncoder {

    private final int[] codes;
    private final byte[] lengths;
    private final EncodedLengthProcessor encodedLengthProcessor = new EncodedLengthProcessor();
    private final EncodeProcessor encodeProcessor = new EncodeProcessor();

    HpackHuffmanEncoder() {
        this(HpackUtil.HUFFMAN_CODES, HpackUtil.HUFFMAN_CODE_LENGTHS);
    }

    /**
     * Creates a new Huffman encoder with the specified Huffman coding.
     *
     * @param codes the Huffman codes indexed by symbol
     * @param lengths the length of each Huffman code
     */
    private HpackHuffmanEncoder(int[] codes, byte[] lengths) {
        this.codes = codes;
        this.lengths = lengths;
    }

    /**
     * Compresses the input string literal using the Huffman coding.
     *
     * @param out the output stream for the compressed data
     * @param data the string literal to be Huffman encoded
     */
    public void encode(ByteBuf out, CharSequence data) {
        ObjectUtil.checkNotNull(out, "out");
        if (data instanceof AsciiString) {
            AsciiString string = (AsciiString) data;
            try {
                encodeProcessor.out = out;
                string.forEachByte(encodeProcessor);
            } catch (Exception e) {
                PlatformDependent.throwException(e);
            } finally {
                encodeProcessor.end();
            }
        } else {
            encodeSlowPath(out, data);
        }
    }

    private void encodeSlowPath(ByteBuf out, CharSequence data) {
        long current = 0;
        int n = 0;

        for (int i = 0; i < data.length(); i++) {
            int b = AsciiString.c2b(data.charAt(i)) & 0xFF;
            int code = codes[b];
            int nbits = lengths[b];

            current <<= nbits;
            current |= code;
            n += nbits;

            while (n >= 8) {
                n -= 8;
                out.writeByte((int) (current >> n));
            }
        }

        if (n > 0) {
            current <<= 8 - n;
            current |= 0xFF >>> n; // this should be EOS symbol
            out.writeByte((int) current);
        }
    }

    /**
     * Returns the number of bytes required to Huffman encode the input string literal.
     *
     * @param data the string literal to be Huffman encoded
     * @return the number of bytes required to Huffman encode {@code data}
     */
    int getEncodedLength(CharSequence data) {
        if (data instanceof AsciiString) {
            AsciiString string = (AsciiString) data;
            try {

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free