快速业务通道

JDK1.4非阻塞套接字API概述 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
ty(); i++) { buffer.put(i); }

这段代码创建了一个包含10个整型值的Buffer,然后将数字0到9放入到Buffer中。同时你可以看到,我使用了capacity方法来获得Buffer的容量。

JDK1.4非阻塞套接字API概述(2)

时间:2010-12-10

要想读取Buffer的内容,你可以用如下方法来处理:

// Reading from a buffer buffer.position(0); while (buffer.hasRemaining()) { int i = buffer.get(); System.out.println("i="+i); }

调用position方法,你能设置当前位置为0;即Bufferr的起始位置。当在当前位置和limit值之间有元素时,hasRemaining方法返回true;直到超出这个范围时,这个方法将返回flase。while循环中的代码调用get方法读取各项,并同时显示在控制台上。

理解Buffer的limit和capacity这两个值之间的区别是十分重要的。Capacity是某个Buffer对象所能包含的项数的最大值。Limit是在0到capacity之间的一个值,它表示一个限度,可以使用limit或者flip方法来设置它。我们来看下面的例子:

// Sample of using flip buffer.position(5); buffer.flip(); while (buffer.hasRemaining()) { int i = buffer.get(); System.out.println("i="+i); }

当前位置被position方法设置成5。Flip方法进行如下操作:先将设置limit为当前位置的值,即5;然后再设置当前位置的值为0。因此,此后的while循环就只能扫描到前5个元素了,因为flip方法设置了新的limit值,即为5。从而,数字0,1,2,3,4将被显示出来。

另一个重要的Buffer类的方法是clear,它将设置position为0并设置limit为Buffer的容量值。基本上,clear方法消除这之前flip(或limit)方法产生的影响。考虑下例:

// Sample of using clear buffer.clear(); while (buffer.hasRemaining()) { int i = buffer.get(); System.out.println("i="+i); }

这段代码将显示数字0到9,而与Buffer的当前位置和limit值无关。

非阻隔(Nonblocking)体系结构

在这一部分,我将从理论的角度上来解释非阻隔体系的结构及其工作原理。这部“喜剧(当然,如果你喜欢的话也可以称做戏剧)”的“人物”如下:

●服务器:接收请求的应用程序。

●客户:一组向服务器端发出请求的应用程序。

●套接字通道:客户端与服务器端之间的通信通道。它能识别服务器端的IP地址和端口号。数据以Buffer中元素的形式通过套接字通道传送。

●选择器:所有非阻隔技术的主要对象。它监视着已注册的套接字通道,并序列化服务器需要应答的请求。

●关键字:选择器用来对对象的请求进行排序。每个关键字代表一个单独的客户端子请求并包含识别客户端和请求类型的信息。

图一:使用非阻隔端口体系的结构图。

JDK1.4非阻塞套接字API概述 - 编程入门网

图1:非阻隔端口结构

你可能注意到,客户端应用程序同时执行对服务器端的请求,选择器将其集中起来,创建关键字,然后将其发送至服务器端。这看起来像是阻隔(Blocking)体系,因为在一定时间内只处理一个请求,但事实并非如此。实际上,每个关键字不代表从客户端发至服务器端的整个信息流,仅仅只是一部分。我们不要忘了选择器能分割那些被关键字标识的子请求里的数据。因此,如果有更多连续地数据发送至服务器端,那么选择器就会创建更多的根据时间共享策略(Time-sharing policy)来进行处理的关键字。强调一下,在图一中关键字的颜色与客户端的颜色相对应。

JDK1.4非阻塞套接字API概述(3)

时间:2010-12-10

服务器端非阻隔(Server Nonblocking)

我以前的部分介绍过的实体都有与其相当的Java实体。客户端和服务器端是两个Java应用程序。套接字通道是SocketChannel类的实例,这个类允许通过网络传送数据。它们能被Java程序员看作是一个

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号