NIO学習ノート2(Channels)

1450 ワード

この章では主にNIOのChannelsについて説明する.
1、ChannelsとIO Streamの違い.
主な違いは以下の通りです.
  • Channelsは双方向であり、同時にデータの読み取りと書き込みをサポートする.IO Streamは一方向で、読むか書くかです.
  • Channelsは非ブロックであり、読み書きは非同期をサポートする.IO Streamはブロックされています.
  • ChannelはBufferにデータを読み込み、BufferからChannelにデータを書き込む.

  • 2、チャンネルは主に実現する.
    主な実装クラスは次のとおりです.
  • FileChannel:ファイルからのデータの読み書きをサポートします.
  • DatagramChannel:UDPプロトコルからのデータの読み書きをサポートします.
  • SocketChannel:TCPプロトコルからのデータの読み書きをサポートします.
  • ServerSocketChannel:すべてのTCPリクエスト接続をリスニングします.接続に成功すると、SocketChannelが作成されます.

  • 3、チャンネルの簡単な例.
    次に、Channelを使用してファイルの内容を読み込む簡単な例を示します.
    public static void readFile(String filePath) throws IOException {
    	//get FileChannel
    	RandomAccessFile aFile = new RandomAccessFile(filePath, "rw");
    	FileChannel inChannel = aFile.getChannel();
    
    	//initial ByteBuffer。
    	ByteBuffer buf = ByteBuffer.allocate(48);
    
            //read data into Buffer
            int bytesRead = inChannel.read(buf);
    	while (bytesRead != -1) {
    
    	      System.out.println("Read " + bytesRead);
    	      buf.flip();
    
    	      //read data from Buffer。
    	      while(buf.hasRemaining()){
    	          System.out.print((char) buf.get());
    	      }
    
    	      buf.clear();
    	      bytesRead = inChannel.read(buf);
             }
    	 aFile.close();
    }