java nio的通道類似流,但又有些不同:
既可以從通道中讀取資料,又可以寫資料到通道。但流的讀寫通常是單向的。
通道可以異步地讀寫。
通道中的資料總是要先讀到一個buffer,或者總是要從一個buffer中寫入。
正如上面所說,從通道讀取資料到緩沖區,從緩沖區寫入資料到通道。如下圖所示:

這些是java nio中最重要的通道的實作:
filechannel
datagramchannel
socketchannel
serversocketchannel
filechannel 從檔案中讀寫資料。
datagramchannel 能通過udp讀寫網絡中的資料。
socketchannel 能通過tcp讀寫網絡中的資料。
serversocketchannel可以監聽新進來的tcp連接配接,像web伺服器那樣。對每一個新進來的連接配接都會建立一個socketchannel。
下面是一個使用filechannel讀取資料到buffer中的示例:
注意 buf.flip() 的調用,首先讀取資料到buffer,然後反轉buffer,接着再從buffer中讀取資料。下一節會深入講解buffer的更多細節。