Channel(通道)官方解读:
中文解释: 一个用于输入/输出操作的连接。通道表示对实体的开放连接,如硬件设备、文件、网络套接字或能够执行一个或多个不同的输入/输出操作的程序组件,例如读取或写入。
Thinking In Java中的描述:
速度的提升来自于所用的结构更接近于操作系统执行I/O的方式:通道和缓冲器。我们可以把它想象成一个煤矿,通道是一个包含煤层(数据)的矿藏,而缓冲器则是派来送到矿藏的卡车。卡车载满煤炭而归,我们再从卡车上获取煤炭。也就是说,我们并没有直接和通道交互;我们只是和缓冲器交互,并把缓冲器派送到通道。通道要么从缓冲器中获得数据,要么向缓冲器发送数据。
Channel是对I/O操作的封装。
FlieChannel配合ByteBuffer,将读写的数据缓存到内存中,然后以批量/缓存的方式read/write,省去了非批量操作时的重复中间操作,操作大文件时可以显著提高效率。
不过对于运行在容器中的应用需要考虑GC,而ByteBuffer可以使用系统内存,使用后无需GC。
此外,ByteBuffer还有一个子类MappedByteBuffer可以直接将文件映射到操作系统的虚拟内存中,读写文件速度会更快。