Home / Class/ Utf8LineParser Class — netty Architecture

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;
        }
    }

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