当前位置: 首页 > 教程 > Java NIO >

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();