Home / Function/ decode() — netty Function Reference

decode() — netty Function Reference

Architecture documentation for the decode() function in Snappy.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  f2623adf_f9d0_6b9a_01bf_992a8c89c1e8["decode()"]
  6a7984ff_ded6_5ba2_b4bb_f92d0d3986f8["Snappy"]
  f2623adf_f9d0_6b9a_01bf_992a8c89c1e8 -->|defined in| 6a7984ff_ded6_5ba2_b4bb_f92d0d3986f8
  61395c44_d8f1_2ccc_d61d_8a1707cbc191["readPreamble()"]
  f2623adf_f9d0_6b9a_01bf_992a8c89c1e8 -->|calls| 61395c44_d8f1_2ccc_d61d_8a1707cbc191
  7210bee0_d5c7_4186_aa1a_9a8f95e1e757["decodeLiteral()"]
  f2623adf_f9d0_6b9a_01bf_992a8c89c1e8 -->|calls| 7210bee0_d5c7_4186_aa1a_9a8f95e1e757
  02f1d546_5814_3353_a804_4d9f39591d0d["decodeCopyWith1ByteOffset()"]
  f2623adf_f9d0_6b9a_01bf_992a8c89c1e8 -->|calls| 02f1d546_5814_3353_a804_4d9f39591d0d
  5a991b7b_d13e_6b74_df07_e461641c7020["decodeCopyWith2ByteOffset()"]
  f2623adf_f9d0_6b9a_01bf_992a8c89c1e8 -->|calls| 5a991b7b_d13e_6b74_df07_e461641c7020
  f1c4d3ee_834b_d5ad_b8b3_2d0617d38468["decodeCopyWith4ByteOffset()"]
  f2623adf_f9d0_6b9a_01bf_992a8c89c1e8 -->|calls| f1c4d3ee_834b_d5ad_b8b3_2d0617d38468
  style f2623adf_f9d0_6b9a_01bf_992a8c89c1e8 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-compression/src/main/java/io/netty/handler/codec/compression/Snappy.java lines 315–393

    public void decode(ByteBuf in, ByteBuf out) {
        while (in.isReadable()) {
            switch (state) {
            case READING_PREAMBLE:
                int uncompressedLength = readPreamble(in);
                if (uncompressedLength == PREAMBLE_NOT_FULL) {
                    // We've not yet read all of the preamble, so wait until we can
                    return;
                }
                if (uncompressedLength == 0) {
                    // Should never happen, but it does mean we have nothing further to do
                    return;
                }
                out.ensureWritable(uncompressedLength);
                state = State.READING_TAG;
                // fall through
            case READING_TAG:
                if (!in.isReadable()) {
                    return;
                }
                tag = in.readByte();
                switch (tag & 0x03) {
                case LITERAL:
                    state = State.READING_LITERAL;
                    break;
                case COPY_1_BYTE_OFFSET:
                case COPY_2_BYTE_OFFSET:
                case COPY_4_BYTE_OFFSET:
                    state = State.READING_COPY;
                    break;
                }
                break;
            case READING_LITERAL:
                int literalWritten = decodeLiteral(tag, in, out);
                if (literalWritten != NOT_ENOUGH_INPUT) {
                    state = State.READING_TAG;
                    written += literalWritten;
                } else {
                    // Need to wait for more data
                    return;
                }
                break;
            case READING_COPY:
                int decodeWritten;
                switch (tag & 0x03) {
                case COPY_1_BYTE_OFFSET:
                    decodeWritten = decodeCopyWith1ByteOffset(tag, in, out, written);
                    if (decodeWritten != NOT_ENOUGH_INPUT) {
                        state = State.READING_TAG;
                        written += decodeWritten;
                    } else {
                        // Need to wait for more data
                        return;
                    }
                    break;
                case COPY_2_BYTE_OFFSET:
                    decodeWritten = decodeCopyWith2ByteOffset(tag, in, out, written);
                    if (decodeWritten != NOT_ENOUGH_INPUT) {
                        state = State.READING_TAG;
                        written += decodeWritten;
                    } else {
                        // Need to wait for more data
                        return;
                    }
                    break;
                case COPY_4_BYTE_OFFSET:
                    decodeWritten = decodeCopyWith4ByteOffset(tag, in, out, written);
                    if (decodeWritten != NOT_ENOUGH_INPUT) {
                        state = State.READING_TAG;
                        written += decodeWritten;
                    } else {
                        // Need to wait for more data
                        return;
                    }
                    break;
                }
            }
        }
    }

Domain

Subdomains

Frequently Asked Questions

What does decode() do?
decode() is a function in the netty codebase, defined in codec-compression/src/main/java/io/netty/handler/codec/compression/Snappy.java.
Where is decode() defined?
decode() is defined in codec-compression/src/main/java/io/netty/handler/codec/compression/Snappy.java at line 315.
What does decode() call?
decode() calls 5 function(s): decodeCopyWith1ByteOffset, decodeCopyWith2ByteOffset, decodeCopyWith4ByteOffset, decodeLiteral, readPreamble.

Analyze Your Own Codebase

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

Try Supermodel Free