java NIO的通道类似与流,但又有些不同。
1.即可以从通道中读数据,又可以写数据到通道,而流的读写一般都是单向的。
2.通道是可以异步读写的
3.通道中的数据总是要先读到一个Buffer,或者总是从一个Buffer写入。
从缓冲区写数据到Channel,从Channel读数据到缓冲区,如下图所示。
Channel的实现
这些是Java NIO中最重要的通道的实现
FileChannel :从文件读写数据
DatagramChannel:通过UDP读写网络中的数据
SocketChannel:可以通过TCP读写网络中的数据
ServerSocketChannel:监听新进来的TCP连接,想Web服务器那样,对每一个新进来的连接都会创建一个SocketChannel.
以下是一个Channel的基本示例:
RandomAccessFile aFile = new RandomAccessFile("data/nio-data.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();