Netty学习之ByteBuf

Netty学习之ByteBuf

简介

Netty是一个高性能、高可扩展性的异步事件驱动的网络应用程序框架,它极大地简化了TCP和UDP客户端和服务器开发等网络编程。

Netty重要的四个重要内容:

1)Reactor线程模型:一种高性能的多线程程序设计思路;

2)Netty中自己定义的Channel概念:增强版的通道概念;

3)ChannelPipeline责任链设计模式:事件处理机制;

4)内存管理:增强的ByteBuf缓冲区。

目的

ByteBuf是为解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的。

JDK ByteBuffer的缺点:

1)无法动态扩容

长度是固定的,不能动态扩展和收缩,当数据大于ByteBuffer容量时,会发生索引越界异常。

2)API使用复杂

读写的时候需要手动调用flip()和rewind()等方法,使用时需要非常谨慎地使用这些api,否则很容易出错。

ByteBuf操作

ByteBuf三个重要内容:capacity容量、readerIndex读取位置、writerIndex写入位置。提供了两个指针变量来支持顺序读和写操作,分别是读操作readerIndex和写操作writerIndex。
Netty学习之ByteBuf

ByteBuf动态扩容

Netty学习之ByteBuf

ByteBuf实现

Netty学习之ByteBuf

在使用中,都是通过ByteBufAllocator分配器进行申请,同时分配器具备有内存管理的功能。

零拷贝机制

Netty学习之ByteBuf

使用ByteBuf是Netty高性能很重要的一个原因!

零拷贝机制,没有改变原来的数据,原来数据内存的内存地址没有改变,只是引用方式改变了,避免了buffer之间的拷贝,从而提升了性能。