Channel VS Stream

  1. 通道是双向通信,流是单向通信(输入流、输出流)
  2. 通道能够非阻塞的读写
  3. 通道依赖buffer,通常都是从buffer中读写

    Channel实现

  4. FileChannel

    从文件中读写数据

  5. DatagramChannel

    网络传输,UDP

  6. SocketChannel

    网络传输,TCP

  7. ServerSocketChannel

    网络传输,监听某一端口,等待SockerChannel的连接,每当有连接接入,就会有一个SockerChannel被创建。

示例

  1. RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
  2. FileChannel inChannel = aFile.getChannel();
  3. ByteBuffer buf = ByteBuffer.allocate(48);
  4. int bytesRead = inChannel.read(buf);
  5. while (bytesRead != -1) {
  6. System.out.println("Read " + bytesRead);
  7. buf.flip();
  8. while(buf.hasRemaining()){
  9. System.out.print((char) buf.get());
  10. }
  11. buf.clear();
  12. bytesRead = inChannel.read(buf);
  13. }
  14. aFile.close();

对于flip()``clean()``hasRemaining()的讲解,我们下一节再说。