概述:
Channel(通道)在前面也提到過嚷掠,是NIO的三大組件之一捏检,相當于BIO中的流荞驴,不一樣的是,通道是雙向的贯城、可異步的熊楼、讀寫必須經(jīng)過緩沖區(qū)的。二流是單向、同步的鲫骗。
Channel的一些實現(xiàn):
FileChannel(讀寫文件)
DatagramChannel(UDP)
SocketChannel(TCP客戶端)
ServerSocketChannel(TCP服務(wù)器端)
Scatter 分散:
將通道中的數(shù)據(jù)分散的寫入到Buffer中犬耻。
Scatter 分散
舉個栗子:
消息頭、消息體执泰。
ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body = ByteBuffer.allocate(1024);
ByteBuffer[] bufferArray = { header, body };
channel.read(bufferArray);
這會將數(shù)據(jù)按順序?qū)懭胝泶牛遣贿m合傳輸動態(tài)消息(因為大小不固定)
Gather 聚合:
將多個Buffer讀取到一個通道中。
Gather 聚合
舉個栗子:
ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body = ByteBuffer.allocate(1024);
ByteBuffer[] bufferArray = { header, body };
channel.write(bufferArray);
Gather可以傳輸動態(tài)的消息术吝。
如果兩個通道中有一個是FileChannel就可以直接從一個通道傳輸?shù)搅硪粋€通道
通過transferFrom()计济、transferTo()方法、但是SocketChannel只能傳輸此刻已經(jīng)準備好的數(shù)據(jù)排苍。