请解释 Java NIO 中的 Channel 是什么,并说明它与传统 IO 的主要区别。
考察说明
考查对 Java NIO 核心抽象 Channel 的理解及其与传统 IO 的对比。
回答思路
- 【回答框架 1】Channel 是 Java NIO 中用于 I/O 操作的通道,它类似于传统 IO 中的流,但支持双向读写,且可以非阻塞。
- 【回答框架 2】Channel 的主要实现包括 FileChannel、SocketChannel 和 ServerSocketChannel,分别用于文件、TCP 客户端和服务端通信。
- 【回答框架 3】与传统 IO 的流不同,Channel 可以与 Buffer 配合使用,数据从 Channel 读入 Buffer,或从 Buffer 写入 Channel,这提高了灵活性和性能。
- 【回答框架 4】Channel 支持阻塞和非阻塞模式,非阻塞模式下可以配合 Selector 实现多路复用,提高系统吞吐量。
- 【关键点 1】Channel 是双向的,可读可写。
- 【关键点 2】Channel 必须与 Buffer 交互。
- 【关键点 3】Channel 支持非阻塞模式,可与 Selector 配合实现多路复用。
- 【易错点 1】不要混淆 Channel 与流,Channel 是双向的,流是单向的。
- 【易错点 2】FileChannel 不能切换到非阻塞模式,这点与 SocketChannel 不同。