在 Java 中,I/O 操作可以是阻塞的,也可以是非阻塞的。
阻塞 I/O
- 读操作: 如果没有数据可读,
read()
方法会一直阻塞,直到有数据可读或发生错误。即使有部分数据可读,如果数据量小于指定的长度,read()
方法也会立即返回,而不是等待所有数据都准备好。 - 写操作:
write()
方法会一直阻塞,直到所有数据都写入完成或发生错误。
非阻塞 I/O
- 读操作: 如果没有数据可读,
read()
方法会立即返回,并返回一个错误码(通常是EAGAIN
)。如果有数据可读,read()
方法会读取尽可能多的数据,并返回实际读取的字节数。 - 写操作:
write()
方法会尝试写入尽可能多的数据,并返回实际写入的字节数。
总结
阻塞 I/O 操作在数据准备好之前或写入完成之前会一直阻塞线程,而 非阻塞 I/O 操作则会立即返回, regardless of whether data is available or not. 选择哪种 I/O 模型取决于具体的应用场景。
暂无评论