Netty

Netty之ByteBuf介绍

2019-03-17  本文已影响0人  Real_man

内存分配是Netty中最为底层的一部分,主要负责从底层的IO中读取到ByteBuf,然后传递给应用程序,应用程序处理完之后封装为ByteBuf,写回给IO。这块内容相比于Netty的其它模块是非常复杂的。

ByteBuf结构

先了解下ButeBuf结构和常用的API,ByteBuf内部有两个指针,提供了顺序的读写操作,读操作有readerIndex(),写操作有writerIndex()。

如图:

image-20190317084755953

当读取数据直到readerIndex与writerIndex达到同样的值时候,会抛出IndexOutOfBoundsException。

ByteBuf API

主要有以下几类的常用API

ByteBuf 分类

AbstractByteBuf是ByteBuf的骨架实现,其它的类大都是基于AbstractByteBuf实现。

简单的看两个方法:

    public byte readByte() {
        // 检查字节是否可读
        checkReadableBytes0(1);
        int i = readerIndex;
        // 读取字节放到子类中实现,不同的子类读取字节的方式不同
        byte b = _getByte(i);
        // 读指针加1
        readerIndex = i + 1;
        return b;
    }
    
    @Override
    public ByteBuf writeByte(int value) {
        // 确保是可以进行写的
        ensureAccessible();
        ensureWritable0(1);
        // 写自己放到子类中实现,并且写指针加1
        _setByte(writerIndex++, value);
        return this;
    }

那么分类:

image-20190317091247507

最后

关于ByteBuf的简单介绍就到这了。

上一篇下一篇

猜你喜欢

热点阅读