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。
ByteBuf动态扩容
ByteBuf实现
在使用中,都是通过ByteBufAllocator分配器进行申请,同时分配器具备有内存管理的功能。
零拷贝机制
使用ByteBuf是Netty高性能很重要的一个原因!
零拷贝机制,没有改变原来的数据,原来数据内存的内存地址没有改变,只是引用方式改变了,避免了buffer之间的拷贝,从而提升了性能。