首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java NIO与IO的详细差异(通俗篇)

2014-01-06 
Java NIO与IO的详细区别(通俗篇)现在写个简短的科普文:?就速度来说?CPU 内存 硬盘?I- 就是从硬盘到内

Java NIO与IO的详细区别(通俗篇)
现在写个简短的科普文:

?

就速度来说?CPU > 内存 > 硬盘

?

    I- 就是从硬盘到内存O- 就是从内存到硬盘

    第一种方式:我从硬盘读取数据,然后程序一直等,数据读完后,继续操作。这种方式是最简单的,叫阻塞IO

    ?

    第二种方式:我从硬盘读取数据,然后程序继续向下执行,等数据读取完后,通知当前程序(对硬件来说叫中断,对程序来说叫回调),然后此程序可以立即处理数据,也可以执行完当前操作在读取数据。

    ?

    在以前的 Java IO 中,都是阻塞式 IO,NIO 引入了非阻塞式 IO。

    ?

    还有一种就是同步 IO 和异步 IO。经常说的一个术语就是“异步非阻塞”,好象异步和非阻塞是同一回事,这大概是一个误区吧。

    ?

    至于 Java NIO 的 Selector,在旧的 Java IO 系统中,是基于 Stream 的,即“流”,流式 IO。

    ?

    当程序从硬盘往内存读取数据的时候,操作系统使用了 2 个“小伎俩”来提高性能,那就是预读,如果我读取了第一扇区的第三磁道的内容,那么你很有可能也会使用第二磁道和第四磁道的内容,所以操作系统会把附近磁道的内容提前读取出来,放在内存中,Java NIO与IO的详细差异(通俗篇)缓存

    ?

    (PS:以上过程简化了)

    ?

    通过上面可以看到,操作系统是按块 Block从硬盘拿数据,就如同一个大脸盆,一下子就放入了一盆水。但是,当 Java 使用的时候,旧的 IO 确实基于?流 Stream的,也就是虽然操作系统给我了一脸盆水,但是我得用吸管慢慢喝。

    ?

    于是,NIO 横空出世。

        比喻好通俗。。 5 楼 yixiandave 2014-01-03   为什么有种没写完的感觉。。。 6 楼 somefuture 2014-01-03   yixiandave 写道为什么有种没写完的感觉。。。
    明显没写完,太坑了。。 7 楼 ie7shop 前天   如些精妙详细的内容,让人叹为观止。。。 8 楼 shengren0 前天   好详细啊!上首页了 9 楼 zhouyicang 前天   i/o通俗说应该是内存到外部存储吧,我感觉内存到网络也是io吧,不只是硬盘,个人不是很专业,只是有疑问,有错了指正哦 10 楼 yidao620c 昨天   果然很详细 11 楼 lonelybug 昨天   NIO应用的是Reactor Design Pattern来作为实现的基本理念。

    NIO还包括Direct Memory,和Zero-Copy。

    总之,想学习的人还是自己看JDK文档吧。技术要的是严谨和深入浅出。

    既然你写的题目是NIO和IO的详细区别,我觉得你还是需要改进一下你的文章。

热点排行