【发布时间】:2018-04-25 17:06:20
【问题描述】:
我看到Java NIO 相当复杂。我们能不能从 Java IO 中创造出达到 Java NIO 目的的东西?
我认为很容易实现面向缓冲区和非阻塞 IO——Java NIO 的两个主要特性。我们可以将数据从流中读取到缓冲区中,而不是立即处理它们。关于非阻塞 IO,我们可以使用 Java IO 的 setSoTimeout 方法让线程在一定时间(例如 100ms)后放弃等待。基于此,我们可以创建一个处理多个连接的线程。
如果像上面那样简单,Java NIO 是不是多余的?
【问题讨论】:
-
没有。 100mS 和零,甚至 1mS 和零之间有很大的区别。您无法通过读取超时有效地实现
select()。 -
好吧,我放弃,什么是“sth”?
-
我想知道Java NIO如何识别通道中的数据是否可用?不是要等待一段时间的数据吗?
-
@PeterPhan 否。它调用
select(2)或poll()变体之一。 -
“我认为这很容易”:每个人想到简单的解决方案来解决他们不完全理解的问题的著名第一句话。
标签: java io network-programming netty nio