标签: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编程中的应用场景,如图所示:
一个socket连接对应一个输入/输出通道,一个输入/输出通道在对应一个线程,这样有多个请求,就需要开辟多个线程,这样对CPU的负担大大的提高。关系是一对一的。
Java NIO 在socket编程中的应用场景,如图所示:
在上图中我们能看到中间有类叫做Selector
1.当socket服务端启动后对每个socketchannel进行建立关系。
2.这时只需要把探知的socketchannel告诉Selector。
3.当有事件发生时,会通知传回一组SelectionKey,读取这些Key,就会获得我们刚刚注册过的socketchannel。
4.原先已经建立好的Channel中读取数据。
5.最后可以接收到的这些数据进行处理。
所以我们能看出不必像原先那样开大量的线程,然后让线程傻傻的等待。而NIO不必,通道已经由一个线程建立好了,有事就说话,说了就去做,而且在一个线程中建立了多个通道,可以同时做很多事情,不会像原先那样开辟多个线程,耗费CPU资源,关系是1对多的。
标签:style blog http java 使用 io strong 文件
原文地址:http://www.cnblogs.com/muzhongjiang/p/3880842.html