Java NIO 通道
精华
小牛编辑
168浏览
2023-03-14
1 Channel的介绍
Java NIO的通道类似于流,但有一些区别:
- 您可以读取和写入通道。流通常是单向的(读或写)。
- 通道可以异步读写。
- 通道始终读取或写入缓冲区。
如上所述,您将数据从通道读取到缓冲区中,然后将数据从缓冲区写入通道中。如下图:
Java NIO:通道将数据读取到缓冲区中,而缓冲区将数据写入通道中 |
2 Channel的实现
以下是Java NIO中最重要的Channel实现:
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
FileChannel:读取数据到文件中。
DatagramChannel:可以读取并在通过UDP网络写入数据。
SocketChannel:可以读取和通过TCP网络写入数据。
ServerSocketChannel:让您监听进入的TCP连接,例如Web服务器一样。为每个传入连接SocketChannel创建一个。
3 Channel的案例
该示例使用FileChannel读取一些数据到Buffer:
/**
* 小牛知识库网: https://www.xnip.cn
*/
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();