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();//得到與之關聯的Selector 對象
public abstract SelectableChannel channel();//得到與之關聯的通道
public final Object attachment();//得到與之關聯的共享資料
public abstract SelectionKey interestOps(int ops);//設定或改變監聽事件
public final boolean isAcceptable();//是否可以 accept
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();//得到一個 SocketChannel 通道
public final SelectableChannel configureBlocking(boolean block);//設定阻塞或非阻塞模式,取值 false 表示采用非阻塞模式
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();//關閉通道