Java NIO Channel(三)

原文連接:http://tutorials.jenkov.com/java-nio/channels.htmlhtml

Java NIO Channel

  • Channel 的實現
  • 簡單的Channel例子

  Java NIO和標準的IO流,有一些不一樣的地方:java

  1. 對於channel,你能夠寫或者讀。而stream的話,只能寫或只能讀。
  2. channel的讀和寫是異步的。
  3. channel的讀和寫老是和buffer相關聯。

  放一張老圖:網絡

                           

    Channel Implementations

  如下是Java NIO中重要的channel實現類dom

  1. FileChannel
  2. DatagramChannel
  3. SocketChannel
  4. ServerSocketChannel

  FileChannel,讀取或寫入數據到file(文件)異步

  DatagramChannel,經過網絡讀取或寫入數據,採用UDP協議spa

  SocketChannel,經過網絡讀取或寫入數據,採用TCP協議code

  ServerSocketChannel,容許你監聽採用TCP的鏈接htm

    Basic Channel Example

  這裏有一個FileChannel向Buffer裏讀入數據的例子blog

  

 1     RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
 2     FileChannel inChannel = aFile.getChannel();
 3 
 4     ByteBuffer buf = ByteBuffer.allocate(48);
 5 
 6     int bytesRead = inChannel.read(buf);
 7     while (bytesRead != -1) {
 8 
 9       System.out.println("Read " + bytesRead);
10       buf.flip();
11 
12       while(buf.hasRemaining()){
13           System.out.print((char) buf.get());
14       }
15 
16       buf.clear();
17       bytesRead = inChannel.read(buf);
18     }
19     aFile.close();

  注意,調用的flip()方法,當你將數據讀取到buffer中後,你須要調用flip()方法。以後你就能夠讀取出來。ip

相關文章
相關標籤/搜索