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是双向的,既可用来进行读操作,又可用来进行写操作。