码迷,mamicode.com
首页 > 其他好文 > 详细

IO与NIO

时间:2014-08-12 18:46:04      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   java   使用   io   strong   文件   

Java中普通的I/O功能  一般体现在 1.文件读写、2.网络传输、3.字节流输入/输出  应用场景。而Java中的 NIO 提高了原有I/O的性能。

将传统的IO 转向 Non-Blocking IO 的目的 有以下的原因
1.Typical IO 的Stream方式 处理速度缓慢 而 Non-Blocking 是以block方式
2. Non-Blocking IO 使用到了 buffer

Java的NIO包含以下特性:
  1.内存映射到文件
  2.文件锁定
  3.字符集编码和锁码
  4.非阻塞的输入/输出

从下面2图中就可以看出Java中普通的I/O和Java中NIO的区别

Java传统I/O在socket编程中的应用场景,如图所示:

bubuko.com,布布扣

一个socket连接对应一个输入/输出通道,一个输入/输出通道在对应一个线程,这样有多个请求,就需要开辟多个线程,这样对CPU的负担大大的提高。关系是一对一的。

Java NIO 在socket编程中的应用场景,如图所示:

bubuko.com,布布扣

在上图中我们能看到中间有类叫做Selector 
1.当socket服务端启动后对每个socketchannel进行建立关系。
2.这时只需要把探知的socketchannel告诉Selector。
3.当有事件发生时,会通知传回一组SelectionKey,读取这些Key,就会获得我们刚刚注册过的socketchannel。
4.原先已经建立好的Channel中读取数据。
5.最后可以接收到的这些数据进行处理。

所以我们能看出不必像原先那样开大量的线程,然后让线程傻傻的等待。而NIO不必,通道已经由一个线程建立好了,有事就说话,说了就去做,而且在一个线程中建立了多个通道,可以同时做很多事情,不会像原先那样开辟多个线程,耗费CPU资源,关系是1对多的。

IO与NIO,布布扣,bubuko.com

IO与NIO

标签:style   blog   http   java   使用   io   strong   文件   

原文地址:http://www.cnblogs.com/muzhongjiang/p/3880842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!