Java-io和nio的本质区别是什么?

发布于 2016-12-31 20:47:34 字数 0 浏览 1247 评论 3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清晨说ぺ晚安 2017-05-25 08:23:22

这个问题太宽泛了.要多深入才算本质的问题.我也不清楚.

1,到现在为止已经不存在传统io了,90%以上的传统io,底层都已经被重写优化成了noi实现,在使用中不用做任何声明,其实就是nio.就连字符操作的Reader与Wirter操作,也有了其nio模式(只不过要特出处理一下).

2,nio使用轮询,io偏重阻塞,其实只是处理数据的表象的问题.这并不是提高效率的本质.只要想,传统io一样可以使用轮询与线程池处理任务.而且如果你以现在最新的jdk进行测试,性能几乎无甚区别

3,nio比传统io最大区别是底层实现,他提出来channels与ByteBuffer的概念.也这是因为这样的概念,与传统的io相比,大幅提高了读写效率.

4,要论述channels的原理,可能需要很久很久时间.这里论述不下.你可以仔细读读<thinking in java>中对nio的论述当作入门资料.

不知道我说的够不够本质,要是再深入,恐怕就需要很久了.

清晨说ぺ晚安 2017-04-16 10:34:21

NIO提供了异步IO
NIO是基本IO的一个补充
NIO是和操作系统底层相关的

甜柠檬 2017-03-07 20:58:16

NIO通常采用Reactor模式,AIO通常采用Proactor模式。AIO简化了程序的编写,stream的读取和写入都有OS来完成,不需 要像NIO那样子遍历Selector。Windows基于IOCP实现AIO,Linux只有eppoll模拟实现了AIO。
Java7之前的JDK只支持NIO和BIO,从7开始支持AIO。
你说的IO应该指BIO,这种模式需要阻塞线程,一个IO需要一个线程,NIO由一个thread来监听connect事件,另外多个thread来监听读写事件,带来性能上很大提高。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文