切换主题
一、三大组件
Netty 的核心组件是 Channel(通道)、Buffer(缓冲区)、Selector(选择器),三者配合实现高效的 IO 操作
- Channel:负责网络 / 文件 IO 的 “连接 / 传输载体”,是数据读写的通道;
- Buffer:负责数据的 “临时存储缓冲”,是 IO 操作中数据的容器;
- Selector:负责 “多路复用”,可同时监听多个 Channel 的 IO 事件
一、Channel
- FileChannel
- 作用:用于文件 IO 操作的通道,负责本地文件的读写(非网络通信场景);
- 特点:是 Java NIO 的基础实现,Netty 中可用于文件传输类业务。
- DatagramChannel
- 作用:基于UDP 协议的网络通道,负责无连接的数据包传输;
- 特点:适用于低延迟、无需可靠传输的场景(如实时通信、广播)。
- SocketChannel
- 作用:基于TCP 协议的客户端通道,负责与 TCP 服务端建立连接并传输数据;
- 特点:是 Netty 中实现 TCP 客户端通信的核心通道类型。
- ServerSocketChannel
- 作用:基于TCP 协议的服务端监听通道,负责绑定端口、监听客户端连接请求;
- 特点:Netty 服务端启动时,会通过它绑定端口并接收客户端连接,再为每个连接创建
SocketChannel。
二、Buffer
- **ByteBuffer(核心缓冲类型)**是最常用的 Buffer,用于字节数据的缓冲,其下又分 3 个子类:
- MappedByteBuffer:基于 “内存映射文件” 的缓冲,直接映射磁盘文件到内存,适合大文件读写;
- DirectByteBuffer:“直接内存缓冲区”,内存分配在 JVM 堆外,减少堆内存拷贝,性能更高(Netty 默认优先使用);
- HeapByteBuffer:“堆内存缓冲区”,内存分配在 JVM 堆中,读写效率略低于直接内存,但便于 GC 管理。
- **其他类型 Buffer(ShortBuffer/IntBuffer 等)**对应 Java 基本数据类型(short/int/long 等)的专用缓冲,用于存储对应类型的数据,避免字节转换的开销,比如
IntBuffer专门缓冲 int 类型数据。- ShortBuffer
- IntBuffer
- LongBuffer
- FloatBuffer
- DoubleBuffer
- CharBuffer
DQ博客