Java NIO Channel
Java NIO通道类似于流,但有一些区别:
- 你可以从Channel中读取数据,也可以写数据到Channel。流通常是单向的(读或写)。
- Channel可以异步读写。
- Channel始终将数据读到Buffer或从Buffer写入。
如上所述,你将数据从Channel读取到Buffer中,然后将数据从Buffer写入Channel中:

2.Channel的实现
以下是Java NIO中最重要的Channel实现:
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
FileChannel从文件读取数据或向文件写入数据。
DatagramChannel可以通过UDP通过网络读取和写入数据。
SocketChannel可以通过TCP通过网络读取和写入数据。
ServerSocketChannel允许你像Web服务器一样侦听传入的TCP连接。对于每个传入连接,都会创建一个SocketChannel。
3.Channel示例
这是一个使用FileChannel将某些数据读入Buffer的基本示例:
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。然后,转换读写模式,再从buf中读出所有数据。
原文地址: https://www.zhblog.net/go/java/tutorial/java-nio-channel?t=610
本文深入探讨了Java NIO通道的特性和用途,包括其与流的区别,如何进行异步读写,以及如何通过Buffer进行数据操作。文章详细介绍了FileChannel、DatagramChannel、SocketChannel和ServerSocketChannel等关键实现,并通过示例展示了如何使用FileChannel进行数据读取。
536

被折叠的 条评论
为什么被折叠?



