Java NIO中的通道详解!分析说明通道Channel的特点和
2022-01-04 本文已影响0人
攻城狮Chova
![](https://img.haomeiwen.com/i25745476/cfe0a862e30db6ba.jpeg)
Channel的特点
-
Java NIO的通道的特点:
- 既可以从通道中读取数据,又可以写数据到通道,通道的读写是双向的
- 通道可以异步读写
- 通道中的数据总是要先读到一个Buffer, 或者是从一个Buffer写入
Channel的实现
-
Java NIO的通道的重要实现:
- FileChannel: 从文件中读取数据
- DatagramChannel: 通过UDP读取网络中的数据
- SocketChannel: 通过TCP读取网络中的数据
- ServerSocketChannel: 可以监听新进来的TCP连接,对每一个新进来的连接都会创建一个SocketChannel
Channel实例
- 使用FileChannel读取数据到Buffer中:
RandomAccessFile file = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel channel = file.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(64);
int bytesRead = channel.read(buffer);
while (bytesRead != -1) {
System.out.println("Read:" + bytesRead);
buffer.flip();
while (buffer.hasRemaining()) {
System.out.println((char) buf.get());
}
buffer.clear();
bytesBuffer = channel.read(buffer);
}
file.close();
- 注意buffer.flip() 的调用:
- 首先读取数据到Buffer
- 然后反转Buffer
- 接着再从Buffer中读取数据