Unsafe继承体系

245 阅读1分钟

一、Unsafe继承体系

image.png

netty模仿jdk的风格搞出了unsafe的概念,jdk的unsafe的代码是指能由jdk本身调用,不开放给应用程序开发者直接调用;

netty中的unsafe也是一样;

二、Unsafe接口

是Channel接口中的非static的接口,它主要定义了一些io操作;

image.png

三、NioUnsafe接口

继承自Unsafe 它是AbstractNioChannel中的定义的非static的内部接口;

它可以获取到SelectableChannel

image.png

四、AbstractUnsafe

是定义在AbstractChannel中的抽象类,但其实Unsafe的所有方法它都实现了;

所有的Unsafe的实现类都必须去继承AbstractUnsafe;

五、AbstractNioUnsafe

定义在AbstractNioChannel中的定义抽象类;

继承AbstractUnsafe实现NioUnsafe;

只是定义成抽象类,但其实所有的方法都实现了;

六、NioMessageUnsafe

定义在AbstractNioMessageChannel中的内部类;

继承了AbstractNioUnsafe;

重新了read()方法

七、NioByteUnsafe

定义在AbstractNioByteChannel中的内部类;

继承了AbstractNioUnsafe;

重新了read()方法

八、NioSocketChannelUnsafe

定义在NioSocketChannel中的内部类

继承自NioByteUnsafe

覆写了protected Executor prepareToClose() 

九、AbstractEpollUnsafe

定义在AbstractEpollChannel中的内部类;

继承自AbstractUnsafe

覆写了:

public EpollRecvByteAllocatorHandle recvBufAllocHandle()
protected final void flush0()
public void connect(
        final SocketAddress remoteAddress, final SocketAddress localAddress, final ChannelPromise promise)

九、EpollServerSocketUnsafe

定义在AbstractEpollServerChannel中的内部类;

继承自AbstractEpollUnsafe

覆写了:

public void connect(SocketAddress socketAddress, SocketAddress socketAddress2, ChannelPromise channelPromise)
void epollInReady()

十、总结

如上我们可以看到Unsafe的继承体系是可以和Channel的继承体系吻合的。