一、Unsafe继承体系
netty模仿jdk的风格搞出了unsafe的概念,jdk的unsafe的代码是指能由jdk本身调用,不开放给应用程序开发者直接调用;
netty中的unsafe也是一样;
二、Unsafe接口
是Channel接口中的非static的接口,它主要定义了一些io操作;
三、NioUnsafe接口
继承自Unsafe 它是AbstractNioChannel中的定义的非static的内部接口;
它可以获取到SelectableChannel
四、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的继承体系吻合的。