Home / Class/ Bzip2BitReader Class — netty Architecture

Bzip2BitReader Class — netty Architecture

Architecture documentation for the Bzip2BitReader class in Bzip2BitReader.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  f3de2c91_9e43_192d_7404_f34bb245b096["Bzip2BitReader"]
  620d12ab_1bd1_c89a_c26f_3a6e21cbd938["Bzip2BitReader.java"]
  f3de2c91_9e43_192d_7404_f34bb245b096 -->|defined in| 620d12ab_1bd1_c89a_c26f_3a6e21cbd938
  351ac7bd_8116_dd02_0a63_d4d65fe408e1["setByteBuf()"]
  f3de2c91_9e43_192d_7404_f34bb245b096 -->|method| 351ac7bd_8116_dd02_0a63_d4d65fe408e1
  64bbf571_faa3_8f8b_b0e0_5e4e593f88e0["readBits()"]
  f3de2c91_9e43_192d_7404_f34bb245b096 -->|method| 64bbf571_faa3_8f8b_b0e0_5e4e593f88e0
  67f193e8_8674_1a88_0ac6_95c40b765c71["readBoolean()"]
  f3de2c91_9e43_192d_7404_f34bb245b096 -->|method| 67f193e8_8674_1a88_0ac6_95c40b765c71
  54084591_20ad_5998_3154_f9a3c7ba1f38["readInt()"]
  f3de2c91_9e43_192d_7404_f34bb245b096 -->|method| 54084591_20ad_5998_3154_f9a3c7ba1f38
  ce144534_a8ee_f386_66e6_eb5d15279574["refill()"]
  f3de2c91_9e43_192d_7404_f34bb245b096 -->|method| ce144534_a8ee_f386_66e6_eb5d15279574
  2898e496_4278_f7a6_9ec4_1981fcfef1f6["isReadable()"]
  f3de2c91_9e43_192d_7404_f34bb245b096 -->|method| 2898e496_4278_f7a6_9ec4_1981fcfef1f6
  121b2114_76fd_98d4_b01e_03bb0846810e["hasReadableBits()"]
  f3de2c91_9e43_192d_7404_f34bb245b096 -->|method| 121b2114_76fd_98d4_b01e_03bb0846810e
  15e9b169_bf60_8183_a71f_29eaef85a9a6["hasReadableBytes()"]
  f3de2c91_9e43_192d_7404_f34bb245b096 -->|method| 15e9b169_bf60_8183_a71f_29eaef85a9a6

Relationship Graph

Source Code

codec-compression/src/main/java/io/netty/handler/codec/compression/Bzip2BitReader.java lines 25–157

class Bzip2BitReader {
    /**
     * Maximum count of possible readable bytes to check.
     */
    private static final int MAX_COUNT_OF_READABLE_BYTES = Integer.MAX_VALUE >>> 3;

    /**
     * The {@link ByteBuf} from which to read data.
     */
    private ByteBuf in;

    /**
     * A buffer of bits read from the input stream that have not yet been returned.
     */
    private long bitBuffer;

    /**
     * The number of bits currently buffered in {@link #bitBuffer}.
     */
    private int bitCount;

    /**
     * Set the {@link ByteBuf} from which to read data.
     */
    void setByteBuf(ByteBuf in) {
        this.in = in;
    }

    /**
     * Reads up to 32 bits from the {@link ByteBuf}.
     * @param count The number of bits to read (maximum {@code 32} as a size of {@code int})
     * @return The bits requested, right-aligned within the integer
     */
    int readBits(final int count) {
        if (count < 0 || count > 32) {
            throw new IllegalArgumentException("count: " + count + " (expected: 0-32 )");
        }
        int bitCount = this.bitCount;
        long bitBuffer = this.bitBuffer;

        if (bitCount < count) {
            long readData;
            int offset;
            switch (in.readableBytes()) {
                case 1: {
                    readData = in.readUnsignedByte();
                    offset = 8;
                    break;
                }
                case 2: {
                    readData = in.readUnsignedShort();
                    offset = 16;
                    break;
                }
                case 3: {
                    readData = in.readUnsignedMedium();
                    offset = 24;
                    break;
                }
                default: {
                    readData = in.readUnsignedInt();
                    offset = 32;
                    break;
                }
            }

            bitBuffer = bitBuffer << offset | readData;
            bitCount += offset;
            this.bitBuffer = bitBuffer;
        }

        this.bitCount = bitCount -= count;
        return (int) (bitBuffer >>> bitCount & (count != 32 ? (1 << count) - 1 : 0xFFFFFFFFL));
    }

    /**
     * Reads a single bit from the {@link ByteBuf}.
     * @return {@code true} if the bit read was {@code 1}, otherwise {@code false}
     */
    boolean readBoolean() {
        return readBits(1) != 0;

Frequently Asked Questions

What is the Bzip2BitReader class?
Bzip2BitReader is a class in the netty codebase, defined in codec-compression/src/main/java/io/netty/handler/codec/compression/Bzip2BitReader.java.
Where is Bzip2BitReader defined?
Bzip2BitReader is defined in codec-compression/src/main/java/io/netty/handler/codec/compression/Bzip2BitReader.java at line 25.

Analyze Your Own Codebase

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

Try Supermodel Free