Java NIO(二) Channel

Java NIO的 Channels 类似 streams  流,但又有些不同:

  • 既可以从 Channels 中读取数据,又可以写数据到 Channels 。但streams流的读写通常是单向的。
  • Channels 可以异步地读写。
  • Channels 中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

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

 

 

Channel的实现

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

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

  FileChannel 从文件中读写数据。

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

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

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

基本的 Channel 示例

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

  RandomAccessFile file = new RandomAccessFile("C:\\Users\\wangzhihui\\Desktop\\听语\\test.txt", "rw");
   FileChannel fileChannel = file.getChannel();
   ByteBuffer buf = ByteBuffer.allocate(1024);
   int bytesRead = fileChannel.read(buf);
   System.out.println("Read " + bytesRead);
   buf.flip();
   byte[] data = new byte[buf.limit()];
   buf.get(data);
   System.out.println(new String(data));
   buf.clear();
   file.close();

 

Java NIO系列文章的目录:

  Java NIO 系列教程概述

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

  Java NIO(二) Channel

  Java NIO(三) Buffer 

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

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

  Java NIO系列教程(六) Selector

  Java NIO系列教程(七) FileChannel

  Java NIO系列教程(八) SocketChannel

  Java NIO系列教程(九) ServerSocketChannel

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

  Java NIO系列教程(十一) Pipe

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

  Java NIO系列教程(十 三)Java NIO Path

  Java NIO系列教程(十四) Java NIO Files

  Java NIO(十五)异步读写 AsynchronousFileChannel

posted @ 2022-03-18 14:12  meow_world  阅读(68)  评论(0)    收藏  举报