本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
本博客在此声明所有文章均为转摘,只做资料收集使用。并无其他商业用途。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:210
评论数量:205
留言数量:-19
访问次数:918232
建立时间:2007年5月10日




[J2SE相关]javanio:java nio本质与精要
文章收藏,  网上资源,  软件技术,  电脑与网络

李小白 发表于 2009/6/25 16:19:58

NIO之关键: 1.数据缓冲(Buffer)处理 数据缓冲是IO操作的基本元素.从本质上来说,无论是磁盘还是网络IO,应用程序所作的所有事情就是把数据放到相应的数据缓冲当中去(写操作),或者从相应的数据缓冲中提取数据(读操作).至于数据缓冲中的数据IO设备之间的交互,则是操作系统和硬件驱动程序所关心的事情了.因此,数据缓冲在IO操作中具有重要的作用,是操作系统与应用之间的IO桥梁. 在java.nio中, "Direct ByteBuffer"是一个值得关注的Buffer类型.在创建ByteBuffer的时候可以使用ByteBuffer.allocateDirect()来创建一块直接(Direct)的ByteBuffer.这一块数据缓冲和一般的缓冲不一样.第一,它是一块连续的空间.第二,它的实现不是纯java的代码,而是本地(native)代码.它内存的分配不在Java的堆栈中,不受java内存回收的影响.这种直接的ByteBuffer是NIO用来保证性能的重要手段.刚才提到,数据缓冲是操作系统和应用程序之间的IO桥梁.应用程序需要写出去的数据放到数据缓冲中,操作系统从这块缓冲中获得数据执行写操作.当IO设备数据传进来时,操作系统会将数据放到相应的数据缓冲中,应用程序从缓冲中读进数据进行处理.一般的java对象很难胜任这个直接的数据缓冲工作.而操作系统需要的是一片连续不变动的地址空间,才能完成IO操作.在原来的java版本中需要java虚拟机的介入,将数据进行转换,拷贝才能被操作系统所使用.而通过"Direct ByteBuffer", 应用程序能够直接与操作系统进行交流,大大减少了系统调用的次数而提高了执行效率. 数据缓冲的另外一个重要特点是可以在一个数据缓冲中上再建立一个或多个视图(View)缓冲.这个概念有些类似于数据库视图的概念.同样,在一个数据缓冲之上也可以建立多个逻辑的视图缓冲.视图缓冲的用处很多,例如可以将Byte类型的缓冲当作Int类型的视图,来进行类型转换.视图缓冲也可以将一个大的缓冲看成是很多小的缓冲视图.这对提高性能很有帮助,因为创建物理的数据缓冲(特别是直接的数据缓冲)是非常耗时的操作,而创建视图却非常快.在如Grizzly等框架中就有这方面的考虑. 2.异步通道(Channel) Channel(又称频道)是NIO的另外一个重要的特性.Channel并不是对原有java类的扩充和完善,而是完全崭新的实现.通过Channel, java应用程序能够更好的与操作系统的IO服务结合起来,充分的利用上文提到的ByteBuffer,完成高性能的IO操作.Channel实现也不是纯java的,而是和操作系统结合紧密的本地代码. Channel的一个重要特点是在网络套接字频道(SocketChannel)中,可以将其设置为异步非阻塞方式. 3.有条件的阻塞(Readiness Selection) 类似UNIX的select()或poll().在现在大多数主流OS上,都支持有条件地选择已经准备好的IO通道,这就使得只需要一个线程就能同时有效地管理多个IO通道. NIO通过几个关键的类来实现这种有条件选择的功能: 1) Selector Selector维护了多个注册的Channel以及它们的状态.Channel需要向Selector注册,Selector负责维护和更新Channel的状态,以表明哪些Channel是准备好的. 2) SelectableChannel SelectableChannel是可以被Selector所管理的Channel. FileChannel不属于SelectableChannel,而SocketChannel则属于.因此在NIO中,只有网络IO操作才可能被有条件选择. 3) SelectionKey SelectionKey用于维护Selector和SelectableChannel之间的映射关系.当一个Channel向Selector注册后,就回返回一个SelectionKey作为注册的凭证


阅读全文(2835) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.109 second(s), page refreshed 144757017 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号