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 {
Source
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