4.7 Channel

       Channel是NIO中的一个重要组成部分,可以从Channel中读入数据到Buffer,也可以将Buffer中的数据写入Channel。

4.7 Nio Channel详解_Channel读写数据

4.7.1 Channel的分类

Channel

作用

FileChannel

用于从文件中读取数据

DatagramChannel

通过UDP读写数据

SocketChannel

作为客户端通过TCP读写数据

ServerSocketChannel

作为服务端通过TCP读写数据


4.7.2 FIleChannel读数据

  1. 获取文件Channel(要使用RandomAccessFile)
FileChannel channel = file.getChannel();
  1. 创建buffer
ByteBuffer buffer = ByteBuffer.allocate(48);
  1. 使用channel.read(buffer)将数据读入buffer
int read = channel.read(buffer);
  1. int read = channel.read(buffer)该方法返回-1表示已经读完

       完整例子

System.err.println(System.getProperty("user.dir"));
        RandomAccessFile file = new RandomAccessFile("text.txt", "rw");
        FileChannel channel = file.getChannel();
        //创建一个buffer
        ByteBuffer buffer = ByteBuffer.allocate(48);
        //数据读入buffer
        int read = channel.read(buffer);
        while(read!=-1){
            //flip方法将buffer从写模式切换到读模式
            buffer.flip();
            byte[] array = buffer.array();
            String s = new String(array, StandardCharsets.UTF_8);
            System.err.print(s);
            //将数据读完
            read = channel.read(buffer);
        }



4.7.3 网络Channel

       DatagramChannel,SocketChannel,ServerSocketChannel都是基于网络的,分别是NIO中UDP和TCP网络Channel的实现,相关介绍将在网络编程中叙述。