我们能否从Java IO构建类似于Java NIO的sth



我看到Java NIO相当复杂。我们能否从Java IO创建sth,以实现Java NIO的目的?

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

如果像上面这样容易,Java NIO是多余的吗?

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

原因是NIO的工作方式与Java IO本质上不同。这个"高级"部分需要操作系统的支持。当您只处理少量数据时,10ms 看起来与 60ms 没有太大区别。但正如其他人所说,需要 10 秒而不是 1 分钟的 I/O 会产生天壤之别。

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

最新更新