QpackHuffmanEncoder Class — netty Architecture
Architecture documentation for the QpackHuffmanEncoder class in QpackHuffmanEncoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 4b79dd82_6f55_2bf1_6190_f22cb12cc745["QpackHuffmanEncoder"] 5891d4aa_5f82_c821_87fe_d3399230ecc8["QpackHuffmanEncoder.java"] 4b79dd82_6f55_2bf1_6190_f22cb12cc745 -->|defined in| 5891d4aa_5f82_c821_87fe_d3399230ecc8 b46a0311_f57d_7ee8_4ada_4577ef2429cb["QpackHuffmanEncoder()"] 4b79dd82_6f55_2bf1_6190_f22cb12cc745 -->|method| b46a0311_f57d_7ee8_4ada_4577ef2429cb 7ddd2baf_fb66_a09e_3812_b19b8a4254fa["encode()"] 4b79dd82_6f55_2bf1_6190_f22cb12cc745 -->|method| 7ddd2baf_fb66_a09e_3812_b19b8a4254fa f77bef4d_d92e_47a2_74c1_66b2a5dee76f["encodeSlowPath()"] 4b79dd82_6f55_2bf1_6190_f22cb12cc745 -->|method| f77bef4d_d92e_47a2_74c1_66b2a5dee76f 1e3bf9d5_800a_aa71_3bcc_362216e97c37["getEncodedLength()"] 4b79dd82_6f55_2bf1_6190_f22cb12cc745 -->|method| 1e3bf9d5_800a_aa71_3bcc_362216e97c37 f6690914_0175_a805_662e_6f3952e02780["getEncodedLengthSlowPath()"] 4b79dd82_6f55_2bf1_6190_f22cb12cc745 -->|method| f6690914_0175_a805_662e_6f3952e02780
Relationship Graph
Source Code
codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanEncoder.java lines 23–176
final class QpackHuffmanEncoder {
private final int[] codes;
private final byte[] lengths;
private final EncodedLengthProcessor encodedLengthProcessor = new EncodedLengthProcessor();
private final EncodeProcessor encodeProcessor = new EncodeProcessor();
QpackHuffmanEncoder() {
this(QpackUtil.HUFFMAN_CODES, QpackUtil.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 QpackHuffmanEncoder(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) {
throw new IllegalStateException(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 = 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 QpackHuffmanEncoder class?
QpackHuffmanEncoder is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanEncoder.java.
Where is QpackHuffmanEncoder defined?
QpackHuffmanEncoder is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanEncoder.java at line 23.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free