作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服
Java NIO系列教程(二) Channel

Custom Tab

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

qqqqqqqqq.png


Channel的实现

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

FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel


FileChannel 从文件中读写数据。

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

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

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

基本的 Channel 示例

下面是一个使用FileChannel读取数据到Buffer中的示例:

01    RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");    
02    FileChannel inChannel = aFile.getChannel();    
03    
04    ByteBuffer buf = ByteBuffer.allocate(48);    
05    
06    int bytesRead = inChannel.read(buf);    
07    while (bytesRead != -1) {    
08    
09    System.out.println("Read " + bytesRead);    
10    buf.flip();    
11    
12    while(buf.hasRemaining()){    
13    System.out.print((char) buf.get());    
14    }    
15    
16    buf.clear();    
17    bytesRead = inChannel.read(buf);    
18    }    
19    aFile.close();

注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。

转载自:http://ifeve.com/channels/


Java NIO系列教程(一) Java NIO 概述

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=508

Java NIO系列教程(三) Buffer

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=510

Java NIO系列教程(四) Scatter/Gather

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=511

Java NIO系列教程(五) 通道之间的数据传输

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=512

Java NIO系列教程(六) Selector

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=513

Java NIO系列教程(七) FileChannel

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=514

Java NIO系列教程(八) SocketChannel

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=516

Java NIO系列教程(九) ServerSocketChannel

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=517

Java NIO系列教程(十) Java NIO DatagramChannel

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=518

Java NIO系列教程(十一) Pipe

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=520

Java NIO系列教程(十二) Java NIO与IO

http://wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=519


Home