我们可以从 Java IO 构建类似于 Java NIO 的东西吗?

Could we build sth similar to Java NIO from Java IO?

我看到 Java NIO 相当复杂。我们可以从 Java IO 中创建某物来实现 Java NIO 的目的吗?

我认为很容易实现面向缓冲区和非阻塞 IO - Java NIO 的两个主要特征。我们可以将数据从流中读取到缓冲区中,而不是立即处理它们。关于非阻塞IO,我们可以使用JavaIO的setSoTimeout方法,让一个线程在一定时间后(例如100ms)放弃等待。基于此,我们可以创建一个处理多个连接的线程。

如果像上面那样容易,JavaNIO是不是多余了?

乍一看,您提出的解决方案似乎可行。然而,这只是一个模拟,永远不会像实际的 NIO 实现那样高效。

原因是 NIO 的工作原理与 Java IO 有本质的不同。 "advanced" 这部分需要操作系统的支持。当您只处理少量数据时,10 毫秒看起来与 60 毫秒没有太大区别。但正如其他人所说,需要 10 秒而不是 1 分钟的 I/O 让世界变得不同。

还有其他一些细微之处。套接字超时与等待数据不同。异步 I/O 不一定使用很多线程。通常,每个硬件设备一个线程就足够了。无需等待。上下文切换更少。尽可能高效地处理数据,如果可以避免,这包括不将数据从一个缓冲区复制到另一个缓冲区。最后,这一切加起来。