Utf8LineParser Class — netty Architecture
Architecture documentation for the Utf8LineParser class in StompSubframeDecoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 5d38ba31_ba08_3a99_f6d7_484d97fb7ad5["Utf8LineParser"] 0eb6c218_fd84_4ac9_b764_f0c162e318dd["StompSubframeDecoder.java"] 5d38ba31_ba08_3a99_f6d7_484d97fb7ad5 -->|defined in| 0eb6c218_fd84_4ac9_b764_f0c162e318dd dad809d3_3148_a8f6_cab7_4929950e8f90["Utf8LineParser()"] 5d38ba31_ba08_3a99_f6d7_484d97fb7ad5 -->|method| dad809d3_3148_a8f6_cab7_4929950e8f90 5def9b36_7e5c_a554_7105_12c1d49919c2["AppendableCharSequence()"] 5d38ba31_ba08_3a99_f6d7_484d97fb7ad5 -->|method| 5def9b36_7e5c_a554_7105_12c1d49919c2 9bde2ed0_d958_c955_31d0_73b2f06ed949["process()"] 5d38ba31_ba08_3a99_f6d7_484d97fb7ad5 -->|method| 9bde2ed0_d958_c955_31d0_73b2f06ed949 55abd999_2586_69c2_96cb_976793a79a2b["appendTo()"] 5d38ba31_ba08_3a99_f6d7_484d97fb7ad5 -->|method| 55abd999_2586_69c2_96cb_976793a79a2b 0aa83168_3a3a_1a69_c2b9_259ee6e3e8c0["reset()"] 5d38ba31_ba08_3a99_f6d7_484d97fb7ad5 -->|method| 0aa83168_3a3a_1a69_c2b9_259ee6e3e8c0
Relationship Graph
Source Code
codec-stomp/src/main/java/io/netty/handler/codec/stomp/StompSubframeDecoder.java lines 256–335
private static class Utf8LineParser implements ByteProcessor {
private final AppendableCharSequence charSeq;
private final int maxLineLength;
private int lineLength;
private char interim;
private boolean nextRead;
Utf8LineParser(AppendableCharSequence charSeq, int maxLineLength) {
this.charSeq = checkNotNull(charSeq, "charSeq");
this.maxLineLength = maxLineLength;
}
AppendableCharSequence parse(ByteBuf byteBuf) {
reset();
int offset = byteBuf.forEachByte(this);
if (offset == -1) {
return null;
}
byteBuf.readerIndex(offset + 1);
return charSeq;
}
AppendableCharSequence charSequence() {
return charSeq;
}
@Override
public boolean process(byte nextByte) throws Exception {
if (nextByte == StompConstants.CR) {
++lineLength;
return true;
}
if (nextByte == StompConstants.LF) {
return false;
}
if (++lineLength > maxLineLength) {
throw new TooLongFrameException("An STOMP line is larger than " + maxLineLength + " bytes.");
}
// 1 byte - 0xxxxxxx - 7 bits
// 2 byte - 110xxxxx 10xxxxxx - 11 bits
// 3 byte - 1110xxxx 10xxxxxx 10xxxxxx - 16 bits
if (nextRead) {
interim |= (nextByte & 0x3F) << 6;
nextRead = false;
} else if (interim != 0) { // flush 2 or 3 byte
appendTo(charSeq, (char) (interim | (nextByte & 0x3F)));
interim = 0;
} else if (nextByte >= 0) { // INITIAL BRANCH
// The first 128 characters (US-ASCII) need one byte.
appendTo(charSeq, (char) nextByte);
} else if ((nextByte & 0xE0) == 0xC0) {
// The next 1920 characters need two bytes and we can define
// a first byte by mask 110xxxxx.
interim = (char) ((nextByte & 0x1F) << 6);
} else {
// The rest of characters need three bytes.
interim = (char) ((nextByte & 0x0F) << 12);
nextRead = true;
}
return true;
}
protected void appendTo(AppendableCharSequence charSeq, char chr) {
charSeq.append(chr);
}
protected void reset() {
charSeq.reset();
lineLength = 0;
interim = 0;
nextRead = false;
}
}
Source
Frequently Asked Questions
What is the Utf8LineParser class?
Utf8LineParser is a class in the netty codebase, defined in codec-stomp/src/main/java/io/netty/handler/codec/stomp/StompSubframeDecoder.java.
Where is Utf8LineParser defined?
Utf8LineParser is defined in codec-stomp/src/main/java/io/netty/handler/codec/stomp/StompSubframeDecoder.java at line 256.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free