说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Android开发进阶之NIO非阻塞包(三)

HTML文档下载 WORD文档下载 PDF文档下载
Android开发进阶之NIO非阻塞包(三)

作者:Android开发网


   有关Android NIO的精髓主要用于高负载的Socket网络传输,相对于传统I/O模型的Socket传输方式的优势,我们已经在 Android开发进阶之NIO非阻塞包(一) 中讲到了,这里不再赘述,一起来看看Android NIO有关Socket操作提供的类吧:

  一、ServerSocketChannel 服务器套接字通道在Android SDK中查找package名为  java.nio.channels.ServerSocketChannel

   在Java的NIO中,ServerSocketChannel对应的是传统IO中的ServerSocket,通过ServerSocketChannel类的socket() 方法可以获得一个传统的ServerSocket对象,同时从ServerSocket对象的getChannel() 方法,可以获得一个ServerSocketChannel()对象,这点说明NIO的ServerSocketChannel和传统IO的ServerSocket是有关联的,实例化ServerSocketChannel 只需要直接调用ServerSocketChannel 类的静态方法open()即可。

  二、 SocketChannel 套接字通道 java.nio.channels.SocketChannel   

  在Java的New I/O中,处理Socket类对应的东西,我们可以看做是SocketChannel,套接字通道关联了一个Socket类,这一点使用SocketChannel类的socket() 方法可以返回一个传统IO的Socket类。SocketChannel()对象在Server中一般通过Socket类的getChannel()方法获得。

 三、SelectionKey 选择键 java.nio.channels.SelectionKey

  在NIO中SelectionKey和Selector是最关键的地方,SelectionKey类中描述了NIO中比较重要的事件,比如OP_ACCEPT(用于服务器端)、OP_CONNECT(用于客户端)、OP_READ和OP_WRITE。

 四、Selector 选择器 java.nio.channels.Selector

  在NIO中注册各种事件的方法主要使用Selector来实现的,构造一个Selector对象,使用Selector类的静态方法open()来实例化。

  对于Android平台上我们实现一个非阻塞的服务器,过程如下:

   1. 通过Selector类的open()静态方法实例化一个Selector对象。

   2. 通过ServerSocketChannel类的open()静态方法实例化一个ServerSocketChannel对象。

   3. 显示的调用ServerSocketChannel对象的configureBlocking(false);方法,设置为非阻塞模式,Android123提示网友这一步十分重要。

   4. 使用ServerSocketChannel对象的socket()方法返回一个ServerSocket对象,使用ServerSocket对象的bind()方法绑定一个IP地址和端口号

   5. 调用ServerSocketChannel对象的register方法注册感兴趣的网络事件,很多开发者可能发现Android SDK文档中没有看到register方法,这里Android开发网给大家一个ServerSocketChannel类的继承关系  

java.lang.Object
   ↳ java.nio.channels.spi.AbstractInterruptibleChannel
     ↳ java.nio.channels.SelectableChannel
       ↳ java.nio.channels.spi.AbstractSelectableChannel
         ↳ java.nio.channels.ServerSocketChannel

   这里我们使用的register方法其实来自ServerSocketChannel的父类java.nio.channels.SelectableChannel,该方法原型为 final SelectionKey  register(Selector selector, int operations)  ,参数为我们执行第1步时的selector对象,参数二为需要注册的事件,作为服务器,我们当然是接受客户端发来的请求,所以这里使用SelectionKey.OP_ACCEPT了。

  6. 通过Selector对象的select() 方法判断是否有我们感兴趣的事件发生,这里就是OP_ACCEPT事件了。我们通过一个死循环获取Selector对象执行select()方法的值,SDK中的原始描述为the number of channels that are ready for operation.,就是到底有多少个通道返回。

  7. 如果 Selector对象的select()方法返回的结果数大于0,则通过selector对象的selectedKeys()方法获取一个SelectionKey类型的Set集合,我们使用Java的迭代器Iterator类来遍历这个Set集合,注意判断SelectionKey对象,

  8. 为了表示我们处理了SelectionKey对象,需要先移除这个SelectionKey对象从Set集合中。这句很关键Android 123提醒网友注意这个地方。

  9. 接下来判断SelectionKey对象的事件,因为我们注册的感兴趣的是SelectionKey.OP_ACCEPT事件,我们使用SelectionKey对象的isAcceptable()方法判断,如果是我们创建一个临时SocketChannel对象类似上面的方法继续处理,不过这时这个SocketChannel对象主要处理读写操作,我们注册SelectionKey.OP_READ和SelectionKey.OP_WRITE分配ByteBuffer缓冲区,进行网络数据传输。

  有关具体的示例和解释上面的流畅,由于篇幅原因我们明天Android开发网给出源代码,做详细的分析。

史玉柱的创业经验谈 3G门户和GO桌面:海外推广的生意经 系统级编程语言性能大PK D语言成首选 解读Facebook第二季度财报 移动业务风生水起 如何避免失败,像Google一样玩转大数据 首届游戏运营技术论坛隆重开幕,共论大数据时代的游戏运营之道 OpenStack Swift遇到了Erasure Code 微软Win7 IE11开发者预览版发布 开始改进开发工具讨好开发者 个性化推荐服务商百分点宣布B轮融资1000万美金 全球著名互联网企业背后的开源力量 基础设施对决Facebook vs. Google:差距绝不是一点点 Amazon Q2财报同比转亏,但AWS反其道而行:高歌猛进! 开拓海外市场的两年:海外上线小技巧 SDCC 2013首批讲师名单出炉 一线工程师唱主角 [开源推荐] 跨平台的.NET运行环境 Mono 3.2发布 Heroku发布API平台Beta版 采用OAuth2.0安全授权 大数据时代:移动数据能为我们带来什么? iOS开发经验谈:如何提高应用开发效率? 贝索斯:你否定亚马逊的现在 我决定亚马逊的未来 谷歌新产品Chromecast:一夜之间价格从35美元飙至100美元 移动周报:苹果5周年限免神作,BADLAND开发者访谈 开源平台Cloud Foundry获IBM和百度支持,步入高速发展的“黄金期” GDK仍未发布 谷歌鼓励Glass开发者可提前用Android SDK开发 Adobe发布PhoneGap 3.0 支持命令行工具 初级vs.高级开发者 哪个性价比更高? 一周观察:Cloud Foundry生态圈渐成型 数据分析中的10个注意点,让你更了解用户体验、行为及需求 压不垮就奋行!Dropbox Datastore API给初创NimbusBase带来的启示 史上14大最具创新意义的科技发明 亚马逊应用商店:给应用开发者一个国际舞台 白帽黑客英年早逝:R.I.P,Barnaby Jack 问一下:我的char*都用_T("asdfsafd")表示了,资源也没任何问题,可有时候运行程序显示乱码 在论坛里,发一个帖子新开一个窗口,当发完后让原来那个窗口刷新一下 我的机子到底怎么回事???? 我试试.. CListCtrl中如何选定整个一行? 来到济南天气太热,特来送分 ★★★★★ 见于现在伪ID和盗用密码的现象十分嚣张,我提议…… ★★★★★ 请教各位,我用vb6.0访问ms sql7.0数据库,为什么有时出现,“过期,数据已超时?” 请问COM和DLL有什么区别和联系?(30分) 关于侯老师 win95-a-developers-guide 一书的源配书... ISAPI中不能存取ASP中的Session、Application变量?高手你老人家在哪里? 大家来看看这些招聘题目合不合适 提一个网页制作的问题哈,大家不要扔西红市啊,网叶制作可是程序员的基本技能之一 activeskin里的skinbuilder有谁用过???来讨论吧 我在msdn上看到vb中的字符串有两种:定长字符串和变长字符串。请问如何分别声明这两种类型? 怎样在ADO中引用已打开的recordset的某一字段值,请给几个例,谢谢了! seedundersnow and holyfire help me!about 8253! 谁有cute ftp 4.2.6 beta的注册码 请问如何把页面查询到的记录导入到Excel中呢? 有用过TAdvStringGrid的吗?OnGetEditorType( )为何不被调用? 请教高手如何用Xsl编制函数控制Xml??急急 哪位给一个MD5的例子!谢谢了 长春的李延生来领分 求救:一个VC中多线程的问题 提个问题,原来对VC尤其是界面和C++语法这一块比较熟,现在由于公司需要转C++BUILDER,难不难,需要熟悉哪些 [总300分,会继续加分]哪位大哥用编程实现过创建SQL Server的DTS package并且run the package的全过程[急] 能不能使用html 压缩中提到的文件头有什么作用 , 保含哪些信息 菜鸟问题1 提一个网页制作的问题哈,大家不要扔西红市啊,网叶制作可是程序员的基本技能之一。。。。。。。 关于:import java.util.StringTokenizer; 问题! 如何实现在某特定时间(如每月1号,或7天后)执行特定asp程序? 在开发工具中如:(vc,jsp)中如何得到oracle中自定义函数的返回值 当form被移动的时候会相应什么事件的? 关于使用mscomm32.ocx中的一些问题 类似股票信息显示系统的问题(图形显示) 强烈抗议:无怨无仇,为什么冒用我的ID 写一些乱七八糟的东西????? 一个简单的线程问题! 请问高手:两个类之间的关联关系如何实现? 各位请问, 我的系统要求支持三种语言, BIG5,GB2312,ENGLISH,数据库应该怎样设计!! 求救!!!vfp ,控件 optiongroup1, 属性 ButtonCount=N,如何给第N个OPtionN.Caption赋值 假如上天给你一个机会。。。请看过来。。。 如何配置IIS 使其利用TOMCAT 支持JSP AND SERVLET ? 请问:ORACLEH中保存每列的数据类型的系统表名叫什么? !!这个简单的问题,没解决!!!给分!! 对公的帐号不能向私人帐号汇钱,怎么办? wm_keydown 中 wparam 和 Lparam 中高位和低位所表示的意思是何东西 我用 ADO 从数据库里读数据,当记录实在太多了的时候就死机了,该怎么办? 笨问题:JAVA如何设置全局变量,要在所有的类和整个程序中有效 如何重画dbctrlgrid的每个panel? 浏览并选择路径的对话框的函数是什么? 设X1,X2是一元二次方程X²+4X-3=0的两个根,2X1(X2²+5X2-3)+a=2,则a=? x平方-3[2x-5(x平方-x+1)] 3+2+5+1+8+3+6+4+125=? 分解2x四次+3x三次减5x2次+3x+2 计算:1的平方-2的平方+3的平方-4的平方+5的平方-6的平方+...+2001的平方-2002的平方+2003的平方-2004的平方. (x+5)的平方-(x-2)(x-3) 若x3+5x2-12x+m有因式x-3.则m=? 1.(2√3-3√2)的平方 2.(3√5+2√6)(2√6-3√5)3.√2(√2-√6)+(1+√3)(1-√3)4.(2√3-3√2)(2√2+√3) 如果3x的平方-2x=2,求(x的平方+5)-2(-2的平方+x+3)的值 下列何式为5x^2+17x-12的因式?A:x+1 B:x-1 C:x+4 D:x-4 说出理由啊 , (x+2)(x-3)-2(x-6)(x+5)-3(x平方-5x+17),x=5.5 若2÷(3*x的平方+2x+5)的值为1/3,则1/(6*x的平方+4x+1)的值为? 分解因式5x2+6xy-8y2 (1/2-3+5/6-7/12)*(-6)的平方 100x9.5x0.98+9.5x2简便运算 设x2+ax+b是xn-x3+5x2+x+1与3xn-3x3+14x2+13x+2的公因式,则1+a+b=() 1=1的平方 1+3=2的平方 1+3+5=3的平方 14/5-(3.5x2/7+3.2x1/4)(简便计算) 抛物线y=-0.5x2+2.5x-2与x轴相交于点A,B,与Y轴相交与点C.1.求证:ΔAOC相似与ΔCOB2.过点C做CD//X轴交抛物线与点D.若点P在线段AB上以每秒1个单位的速度由A向B运动,同时点Q在线段CD上也每秒1个单位 (√5+1)(√5-1)= (2-√ 7)(√7+2)= (2√3+1)平方 (7-√3)(2√3+1)=(√5+1)(√5-1)= (2-√ 7)(√7+2)= (2√3+1)平方=?(7-√3)(2√3+1)= 7.5X2.1+75Xo.79怎样简便运算 24.(13分)如图,在平面直角坐标系中,直线y=-x+3与x轴、y轴分别交于点B、C;抛物线y=-x2+bx+c经过24.(13分)如图,在平面直角坐标系中,直线y=-x+3与x轴、y轴分别交于点B、C;抛物线 -4的平方+3×(-2)的平方+(-5)÷(-3分之1)的平方 l.5x一x=5X2 已知:如图12,抛物线y=-4/5x²+mx+4与y轴交于点C,与x轴交于点A、B,(点A在点B的左侧)且满足OC=4OA.设抛物线的对称轴与x轴交于点M:(1)求抛物线的解析式及点M的坐标;(2)联接CM,点Q是射 观察1的平方+2的平方>2*2*1 3的平方+5的平方>>>> 0.64x12.5x2.5x2简便计算 如图,抛物线y=-0.5x2+0.5x+6,与x轴交于A、B两点,与y轴相交于C点已知E点(0,-3),在第一象限的抛物线上取点D,连结DE,使DE被x轴平分,试判定四边形ACDE的形状,并证明你的结论为什么D坐标是(3,3) 1+2+3+4+5+6的平方 小豪在求一个多项式与2x2-3x+7的差时,因错看成加上2x2-3x+7,而得到答案-5x2+2x-7.试求此题的正确答案 如图,抛物线y=-x²+5x+n经过点A(1,0)与y轴交于点B 杨辉三角形有什么规律? 一个多项式加上5x2+3x-2的2倍得1-3x2+x,求这个多项式x后的2代表x的平方 5x2-4(a+3)x+a2-29=0 谁能帮我讲一下杨辉三角 我数学不好,有点看不懂,有一道例题(x+2)^5 我想知道系数确定了,剩下怎么办 一个多项式加5x2+3x-2的2倍得1-3x2+x,则这个多项式是 5X2—3因式分解 谁能告诉我杨辉三角中有哪些数学规律啊~~~ 大家帮帮忙了哦~!~~! (3X3+5X2+X)/(7X3+5X-4) 2x一10二4.5x2怎么算? 数学上杨辉三角怎么运用?如求(a+b)^4 ,(a+b)^5 ,(a+b)^6等,怎么运用杨辉三角来简便运算?(系数我懂,是依次来的,可问题是那些字母的幂数是怎么安排的?)也可以举几个例子让我看懂就好, 1000~1999这1000个整数中数字1一共出现了多少次 (负1减二分之1)乘(负1减3分之1)乘.乘(负1减10分之1) 椭圆5x2+ky2=5的一个焦点为(0,2).求k的值这是一道椭圆方程题,请书写全过程. 0到1000中,有多少个整数包含数字1,2,3和4?用《离散数学》 的 集合代数 方法做!这问题困扰我两个多星期了。不要:1001-(6+5*6+5*6*6)=785 这个。 (负3又3分之2)十(负6分之一)= 点(0,4)是椭圆3KX2+KY2=1的一个焦点 求k 整数1用了一个数字,整数10用1和0两个数字,从一到1000一共用了多少个1和多少个0,其中用mid cstr len 函数 (负1.3)十[负4(负2负7)]= 椭圆8k2x2-ky2=2的一个焦点为(0,√7)求k的值.书里面没有过程的答案是:k=-1或-1/7再次抱歉!题应该是8k2x2-ky2=8我毫无怨言! 从零到999这1000个整数中,共有多少个数字1呢? 数学题所有的要过程3/5X2/11+2/11÷5/2 48X(1/2+5/6+3/8) 2又5/8X9.25+7又3/8X9又1/47/9÷11/8X(1/4+2/3) 7/18÷[(5/7-1/3X7/16] 请不要嫌麻烦 若椭圆2kx2+ky2=1的一个焦点为(0.-4),则k的值为 1到1000的整数,所有数的各位数字加在一起等于多少?如 1000:1999:27...系统坏了, 利用EXCEL确定x3-5x2-4x+6=0近似解?1)x为-9、-8、-7、-6、-5、-4、-3、-2、-1、0、1、2、3、4、5、6、72)x为-1.6、-1.5、-1.4、-1.3、-1.2、-1.1、-1、……、0.6、0.7、0.8、0.9、1、1.1、……、5.2、5.3、5.4、5.5 已知F是椭圆5x2+9y2=45的左焦点,P是此椭圆上的动点,A(1,1)是一定点,求|PA|+3/2|PF|的最小值,并求点P的坐标 从1到1000的整数中任取三个数从1到1000中任取三个数,有序三组数(x,y,z),求x^2+y^2+z^2被7整除的有序三组数(x,y,z)的组数(x,y,z可以相等) 设x1、x2是一元二次方程x^2+4x-3=0的两个根,2x1(x2的平方+5x2-3)=_____ 3(x+1)的平方-5(x+1)=2怎么解 3/8×7+1÷8/3 3/5-3/7+2/5-4/7 (1/125+4/5)×125 1/2+93/8×7+1÷8/33/5-3/7+2/5-4/7(1/125+4/5)×1251/2+9/20÷9/10-5/8
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn