二、チャンネル

1432 ワード

Java NIOのチャネルはストリームに似ていますが、いくつかの違いがあります.
  • は、チャネルからデータを読み出すこともできるし、チャネルにデータを書き込むこともできる.しかし、ストリームの読み取りは通常一方向である.
  • チャネルは、
  • を非同期で読み書きすることができる.
  • チャネルのデータは、常に1つのBufferに読み出されるか、または常に1つのBufferから書き込まれる.

  • チャンネルの実装
    次はNIOにおける重要なチャネル実装である.
    FileChannelファイルからデータを読み込む
  • DatagramChannel UDP読み書きネットワークのデータ
  • を介して
  • SocketChannelは、TCPを介してネットワーク内のデータ
  • を読み出す.
  • ServerSocketChannelはTCP接続を傍受し、新しく入ってきた接続に対してSocketChannelを作成します.

  • 基本的なチャンネルの例
        
    package nio;
    
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    
    public class channel {
    	void cha() throws IOException{
    		
    		RandomAccessFile aFile = new RandomAccessFile("d:/date/nio.txt", "rw");
    		FileChannel inChannel = aFile.getChannel();
    
    		ByteBuffer buf = ByteBuffer.allocate(48);
    
    		int bytesRead = inChannel.read(buf);
    		while (bytesRead != -1) {
    
    		System.out.println("Read " + bytesRead);
    		buf.flip();
    
    		while(buf.hasRemaining()){
    		System.out.print((char) buf.get());
    		}
    
    		buf.clear();
    		bytesRead = inChannel.read(buf);
    		}
    		aFile.close();
    	}
    	
    	public static void main(String[] args) {
    		channel s= new channel();
    		try {
    			s.cha();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }

    注意flip()の呼び出しは,まずBufferにデータを読み出し,次にBufferを反転し,次にBufferからデータを読み出す.