| 1) SelectionKey,表示 Selector 和网络通道的注册关系, 共四种: |
| int OP_ACCEPT:有新的网络连接可以 accept,值为 16 |
| int OP_CONNECT:代表连接已经建立,值为 8 |
| int OP_READ:代表读操作,值为 1 |
| int OP_WRITE:代表写操作,值为 4 |
| |
| # 源码 |
| public static final int OP_READ = 1 << 0; |
| public static final int OP_WRITE = 1 << 2; |
| public static final int OP_CONNECT = 1 << 3; |
| public static final int OP_ACCEPT = 1 << 4; |
| |
| # 常用方法 |
| public abstract class SelectionKey { |
| public abstract Selector selector(); |
| public abstract SelectableChannel channel(); |
| public final Object attachment(); |
| public abstract SelectionKey interestOps(int ops); |
| public final boolean isAcceptable(); |
| public final boolean isReadable(); |
| public final boolean isWritable(); |
| } |
| 1) ServerSocketChannel 在服务器端监听新的客户端 Socket 连接 |
| 2) 相关方法如下 |
| public abstract class ServerSocketChannel extends AbstractSelectableChannel implements NetworkChannel{ |
| public static ServerSocketChannel open(),得到一个 ServerSocketChannel 通道 |
| public final ServerSocketChannel bind(SocketAddress local),设置服务器端端口号 |
| public final SelectableChannel configureBlocking(boolean block),设置阻塞或非阻塞模式,取值 false 表示采用非阻塞模式 |
| public SocketChannel accept(),接受一个连接,返回代表这个连接的通道对象 |
| public final SelectionKey register(Selector sel, int ops),注册一个选择器并设置监听事件 |
| } |
| 1) SocketChannel,网络 IO 通道,具体负责进行读写操作。NIO 把缓冲区的数据写入通道,或者把通道里的数据读到缓冲区。 |
| 2) 相关方法如下 |
| public abstract class SocketChannel extends AbstractSelectableChannel implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, NetworkChannel{ |
| public static SocketChannel open(); |
| public final SelectableChannel configureBlocking(boolean block); |
| public boolean connect(SocketAddress remote); |
| public boolean finishConnect(); |
| public int write(ByteBuffer src); |
| public int read(ByteBuffer dst); |
| public final SelectionKey register(Selector sel, int ops, Object att); |
| public final void close(); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?