MST
星途 面试题库

面试题:Java NIO中通道(Channel)与流(Stream)的区别

请阐述在Java NIO中,通道(Channel)和传统的流(Stream)在数据传输方式、读写模式等方面有哪些主要区别。
32.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

数据传输方式

  • 通道(Channel):基于块(block)传输数据,可直接与缓冲区(Buffer)交互,数据读写以块为单位,效率较高。例如从文件通道读取数据到缓冲区时,会一次性读取尽可能多的数据块填充缓冲区。
  • 传统流(Stream):基于字节或字符逐个传输数据,数据传输按顺序依次进行,每次读写一个字节或字符。如使用InputStream读取数据时,通常是逐个字节读取。

读写模式

  • 通道(Channel):支持双向读写(某些通道类型,如SocketChannel),既可以从通道读取数据到缓冲区,也可以将缓冲区的数据写入通道。并且支持非阻塞I/O操作,可在不阻塞线程的情况下进行读写,例如在处理多个并发连接时,线程可以在通道未准备好读写时去执行其他任务。
  • 传统流(Stream):分为输入流和输出流,只能单向操作,输入流用于读取数据,输出流用于写入数据。而且流的读写操作是阻塞的,即当进行读写时,线程会被阻塞,直到读写操作完成,例如在InputStream调用read()方法时,线程会等待数据可读,期间不能执行其他任务。