1、Channel基礎服務器
通道是一個對象,經過它能夠讀取和寫入數據,Channel就是通向什麼的道路,爲數據的流向提供渠道;網絡
在傳統IO中,咱們要讀取一個文件中的內容使用Inputstream,該stream就是通道,不過在IO中這個通道是單向的,而NIO中Channel是雙向的,既可用來進行讀操做,又可用來進行寫操做;不管讀寫都做用於Buffer。異步
一、將數據經過channdel輸出到文件spa
private static void writer( )throws IOException{ String str="I Love China"; byte [] message=str.getBytes("UTF-8"); FileOutputStream fout = new FileOutputStream( filePath ); FileChannel fc = fout.getChannel(); ByteBuffer buffer = ByteBuffer.allocate( 1024 ); for (int i=0; i<message.length; ++i) { buffer.put( message[i] ); } buffer.flip(); fc.write( buffer ); fout.close(); }
二、經過channel將數據讀入內存code
private static void read( )throws IOException{ FileInputStream inputStream=new FileInputStream(filePath); FileChannel channel=inputStream.getChannel(); ByteBuffer buffer = ByteBuffer.allocate( 1024 ); channel.read(buffer); String msg=new String(buffer.array(),"UTF-8"); System.out.println(msg); inputStream.close(); }
2、channel分類對象
FileChannel 從文件中讀寫數據。
DatagramChannel 能經過UDP讀寫網絡中的數據。
SocketChannel 能經過TCP讀寫網絡中的數據。
ServerSocketChannel能夠監聽新進來的TCP鏈接,像Web服務器那樣。對每個新進來的鏈接都會建立一個SocketChannel。blog
AsynchronousFileChannel:JDK1.7提供的異步操做文件類ip