Home / Class/ ReadOnlyUnsafeDirectByteBuf Class — netty Architecture

ReadOnlyUnsafeDirectByteBuf Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b["ReadOnlyUnsafeDirectByteBuf"]
  eac20bcf_bc7f_0eb4_dd56_800c5fe3a30b["ReadOnlyUnsafeDirectByteBuf.java"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|defined in| eac20bcf_bc7f_0eb4_dd56_800c5fe3a30b
  a1705a05_aeb3_e774_6ccc_31c1f050bd02["ReadOnlyUnsafeDirectByteBuf()"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|method| a1705a05_aeb3_e774_6ccc_31c1f050bd02
  d13ed1d0_888b_1215_d68d_c6bffb61e90e["_getByte()"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|method| d13ed1d0_888b_1215_d68d_c6bffb61e90e
  411ee7b0_e171_8685_66ab_5e5e606f3404["_getShort()"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|method| 411ee7b0_e171_8685_66ab_5e5e606f3404
  21dc5b11_0b94_0573_eb31_858382cfe1b3["_getUnsignedMedium()"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|method| 21dc5b11_0b94_0573_eb31_858382cfe1b3
  d6cfe01c_1882_c80f_c832_8dfb4377679c["_getInt()"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|method| d6cfe01c_1882_c80f_c832_8dfb4377679c
  5b54bed8_85fd_521a_7576_8bba1624e760["_getLong()"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|method| 5b54bed8_85fd_521a_7576_8bba1624e760
  58ba99ab_9497_d8f7_86b0_4309374c437b["ByteBuf()"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|method| 58ba99ab_9497_d8f7_86b0_4309374c437b
  ded47edf_9d24_1040_3147_2551a9b24b19["hasMemoryAddress()"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|method| ded47edf_9d24_1040_3147_2551a9b24b19
  f7f89df3_0b9f_b4a3_f6e5_d9950327763b["memoryAddress()"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|method| f7f89df3_0b9f_b4a3_f6e5_d9950327763b
  92e6c372_18f9_2f9a_f225_01b9d3b8971c["addr()"]
  4dca7c75_8491_c7dd_3eca_c6f1bd3bb01b -->|method| 92e6c372_18f9_2f9a_f225_01b9d3b8971c

Relationship Graph

Source Code

buffer/src/main/java/io/netty/buffer/ReadOnlyUnsafeDirectByteBuf.java lines 28–124

final class ReadOnlyUnsafeDirectByteBuf extends ReadOnlyByteBufferBuf {
    private final long memoryAddress;

    ReadOnlyUnsafeDirectByteBuf(ByteBufAllocator allocator, ByteBuffer byteBuffer) {
        super(allocator, byteBuffer);
        // Use buffer as the super class will slice the passed in ByteBuffer which means the memoryAddress
        // may be different if the position != 0.
        memoryAddress = PlatformDependent.directBufferAddress(buffer);
    }

    @Override
    protected byte _getByte(int index) {
        return UnsafeByteBufUtil.getByte(addr(index));
    }

    @Override
    protected short _getShort(int index) {
        return UnsafeByteBufUtil.getShort(addr(index));
    }

    @Override
    protected int _getUnsignedMedium(int index) {
        return UnsafeByteBufUtil.getUnsignedMedium(addr(index));
    }

    @Override
    protected int _getInt(int index) {
        return UnsafeByteBufUtil.getInt(addr(index));
    }

    @Override
    protected long _getLong(int index) {
        return UnsafeByteBufUtil.getLong(addr(index));
    }

    @Override
    protected ByteBuf getBytes(int index, ByteBuf dst, int dstIndex, int length, boolean internal) {
        checkIndex(index, length);
        ObjectUtil.checkNotNull(dst, "dst");
        if (dstIndex < 0 || dstIndex > dst.capacity() - length) {
            throw new IndexOutOfBoundsException("dstIndex: " + dstIndex);
        }

        if (dst.hasMemoryAddress()) {
            PlatformDependent.copyMemory(addr(index), dst.memoryAddress() + dstIndex, length);
        } else if (dst.hasArray()) {
            PlatformDependent.copyMemory(addr(index), dst.array(), dst.arrayOffset() + dstIndex, length);
        } else {
            dst.setBytes(dstIndex, this, index, length);
        }
        return this;
    }

    @Override
    protected ByteBuf getBytes(int index, byte[] dst, int dstIndex, int length, boolean internal) {
        checkIndex(index, length);
        ObjectUtil.checkNotNull(dst, "dst");
        if (dstIndex < 0 || dstIndex > dst.length - length) {
            throw new IndexOutOfBoundsException(String.format(
                    "dstIndex: %d, length: %d (expected: range(0, %d))", dstIndex, length, dst.length));
        }

        if (length != 0) {
            PlatformDependent.copyMemory(addr(index), dst, dstIndex, length);
        }
        return this;
    }

    @Override
    public ByteBuf copy(int index, int length) {
        checkIndex(index, length);
        ByteBuf copy = alloc().directBuffer(length, maxCapacity());
        if (length != 0) {
            if (copy.hasMemoryAddress()) {
                PlatformDependent.copyMemory(addr(index), copy.memoryAddress(), length);
                copy.setIndex(0, length);
            } else {
                copy.writeBytes(this, index, length);
            }
        }
        return copy;

Frequently Asked Questions

What is the ReadOnlyUnsafeDirectByteBuf class?
ReadOnlyUnsafeDirectByteBuf is a class in the netty codebase, defined in buffer/src/main/java/io/netty/buffer/ReadOnlyUnsafeDirectByteBuf.java.
Where is ReadOnlyUnsafeDirectByteBuf defined?
ReadOnlyUnsafeDirectByteBuf is defined in buffer/src/main/java/io/netty/buffer/ReadOnlyUnsafeDirectByteBuf.java at line 28.

Analyze Your Own Codebase

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

Try Supermodel Free