原文连接 做者:Jakob Jenkov html
Java NIO的通道相似流,但又有些不一样:java
正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。以下图所示:服务器
这些是Java NIO中最重要的通道的实现:网络
FileChannel 从文件中读写数据。dom
DatagramChannel 能经过UDP读写网络中的数据。异步
SocketChannel 能经过TCP读写网络中的数据。code
ServerSocketChannel能够监听新进来的TCP链接,像Web服务器那样。对每个新进来的链接都会建立一个SocketChannel。orm
下面是一个使用FileChannel读取数据到Buffer中的示例:htm
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();
注意 buf.flip() 的调用,首先读取数据到Buffer,而后反转Buffer,接着再从Buffer中读取数据。下一节会深刻讲解Buffer的更多细节。blog
(全文完)