ByteBuf工作原理
ByteBuf维护了两个不同的索引:一个用于读取,一个用于写入。当从ByteBuf读取数据时,它的readerINdex将会递增已被读取的字节数。同样的,当你写入ByteBuf的时候,它的writerIndex也会被递增。
上图中表示的是一个读索引和写索引都设置为0的16字节ByteBuf,若果试图访问超出writerIndex范围的数据将会触发一个IndexOutOfBoundsException异常。
Netty中内置的传输方式主要包括:NIO、Epoll、OIO、Local和Embedded等方式,总结如下:
名称 | 包名 | 描述 |
---|---|---|
NIO | io.netty.channel.socket.io | 使用java.nio.channels包作为基础,基于选择器的方式 |
Epoll | io.netty.channel.epoll | 由JNI驱动的epoll()和非阻塞IO,这种传输只有Linux才支持,比NIO传输速度更快,而且是完全非阻塞的 |
OIO | io.netty.channel.socket.oio | 使用java.net包作为基础 |
Local | io.netty.channel.local | 可以在VM内部通过管道进行通信的本地传输 |
Embedded | io.netty.channel.socket.embedded | Embedded 传输,允许使用 ChannelHandler 而又不需要一个真正的基于网络的传输,测试ChannelHandler实现的时候非常有用 |
Update your browser to view this website correctly. Update my browser now