JavaNIO Channel(3)

JavaNIO channels 和 streams相似中带有不同

  • channels是全双工,支持同时读、写数据,streams同一时刻只能读,或者写
  • channels支持异步读写
  • channels总是从buffers 中读写

如上所言:程序可以从channel中读取数据到buffer中,也可以从buffer中读数据到channel中

这里写图片描述

Channel Implementations(通道的实现类)

下面是NIO中最重要的channel实现类:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel :文件读写
DatagramChannel :UDP读写
SocketChannel :TCP读写
ServerSocketChannel :监听TCP连接,就像web服务器所做的那样。每来一个连接,都会创建一个SocketChannel对象。

简单示例:

用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,然后flip,然后从buffer读出数据。容后讲解buffers的细节。

猜你喜欢

转载自blog.csdn.net/qq_30118563/article/details/80360180