Channel 表示 IO 源与目标打开的连接,Channel 类似于传统的“流”,只不过 Channel 本身不能直接访问数据,Channel 只能与 Buffer 进行交互.

    你要写数据的时候,先写到buffer里面,再写往通道.你如果要读数据,也是先读到通道里面的buffer,然后再由应用程序来处理,这是必须要的



    打个比喻:山西有煤,我们想要,于是乎建了一条铁路连通到山西,
    这条铁路就是这里的”Channel”,那么煤通过什么运过来呢?铁路建好了,就差火车了,
    因此这里的火车就像是缓冲区,火车把山西的煤运到这边来,把我们这里的钱运过去,
    这样双向传输就愉快的完成了。Channel类似于传统的“流”,只不过Channel不能直接访问数据,
    Channel只能与buffer交互。而且流是单向的,分为输入流和输出流, 但是通道是双向的,


    Java 为 Channel 接口提供的最主要实现类如下:
    FileChannel:用于读取、写入、映射和操作文件的通道。
    DatagramChannel:通过 UDP 读写网络中的数据通道。
    SocketChannel:通过 TCP 读写网络中的数据。
    ServerSocketChannel:可以监听新进来的 TCP 连接,对每一个新进来 的连接都会创建一个 SocketChannel。

    传统IO中,Stream是单向的,比如InputStream只能进行读取操作,OutputStream只能进行写操作。
    而Channel是双向的,既可用来进行读操作,又可用来进行写操作。