一:java的nio的channel

Java NIO的通道类似流,但又有些不同:

==>既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。

==>通道可以异步地读写。

==>通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:

二:java的nio的channel的实现

这些是Java NIO中最重要的通道的实现:

==>FileChannel  :

==>DatagramChannel

==>SocketChannel

==>ServerSocketChannel

三:java的nio的channel的实现的作用

==>FileChannel 从文件中读写数据。

==>DatagramChannel 能通过UDP读写网络中的数据。

==>SocketChannel 能通过TCP读写网络中的数据。

==>ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。

四:java的nio的channel的基本例子

 package com.yeepay.sxf.testnio;

 import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
* 简单测试java的nio中channel组件的作用
* @author sxf
*
*/
public class TestChannelForNio { public static void main(String[] args) throws IOException {
//把文件加载到内存 /usr/sxf/testnio文件
RandomAccessFile aFile = new RandomAccessFile("/usr/sxf/testnio", "rw");
//从文件中获取通道
FileChannel inChannel = aFile.getChannel();
//从通道中注册一个缓冲区,每次48个字节
ByteBuffer buf = ByteBuffer.allocate(48);
//读取第一次
int bytesRead = inChannel.read(buf);
//看文件中是否有数据
while (bytesRead != -1) {
//打印第一次读取字符的个数
System.out.println("Read " + bytesRead); //注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。
buf.flip(); //打印每一个字符到控制台
while(buf.hasRemaining()){
System.out.print((char) buf.get());
} //清空这次buffer
buf.clear(); bytesRead = inChannel.read(buf); } aFile.close();
}
}
05-11 16:14