NIO學習之Channel

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

相關文章
相關標籤/搜索