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

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开发网给出源代码,做详细的分析。

2013中国智能交通与大数据技术峰会:迎接交通大数据新时代 大数据应用技术(上):加速创新,重塑世界 英特尔百度携手推出首个跨平台应用商店 12月9日:计算机软件第一夫人Grace Hopper出生 触摸屏将成笔记本标配 电脑行业或将迎来又一春 触摸4G,你必须要知道的那些事儿 TIOBE 2013年12月编程语言排行榜:Transact-SQL冲刺年度语言 敏捷开发的6个实战经验 【图文】走近华为企业业务与支撑万人技术团队的云数据中心 《习惯联盟》陈晓冬:与京东云合作让我们没有后顾之忧 流计算与批处理同现:畅享大数据时代的开源实践 挑战和机遇并存:大数据时代机器学习与可视化 【企业开源系列】收发一条Twitter推文的背后 在IE11中更快地获得您需要的内容 暴露程序员身份的8个行为 英特尔创新应用大赛大评审!创新也有中国风 苹果面临一问题:正源源不断地失去优秀工程师 初学编程者必知的五个网站 大数据基准测试专题论坛:基准测试是一把尚未完成的尺子 大数据应用(下):应用驱动技术,DaaS创造价值 大数据研究与发展专题论坛:大数据在各领域中的应用及发展策略 雅虎新目标:欲收购照片分享网站Imgur 移动开发工具访谈《近匠》第01期:七牛云存储—BaaS进化论 ShareSDK:A轮融资到位!将推社会化评论SDK 70美元,你也能用Raspberry Pi做个专属iBeacon基站 7个鲜为人知却超实用的PHP函数 从管理远程式团队和分布式团队中所获得的宝贵经验 Netflix开源数据流管理器Suro Google新创意:天花板加麦克风 人脑植芯片 苹果获弯曲屏新专利 可给手机弄个大波浪卷 真正的跨平台硬件测试:3DMark已打通PC、iOS、Android 请教用PHP开发物业收费软件的开行性! 谁有C++经典书籍电子版 VC技术内幕的电子版pdg文件格式要用何种工具才能浏览??? 请教各位:一个运行notes c++ api 的超级菜问题: 推荐一下制作GIF的免费软件. 关于双系统!!! 如何将数据库中保存的word文件读出并在IE中大开? 关于acmStreamOpen的问题? 关于editmask的问题 TURBOC 3.0的问题,在线等待..... 各位高手!我又一问题请教!请帮忙!!! IIS如何与Tomcat结合,请指教! 如何用java访问Excel文件? 如何添加空记录 非常着急!!请高手赐教!我刚注册,只有200分奉送!!谢谢!!! 哪儿可以提供ExpressNavBar vcl下? 各位高手快来指点一下,是关于动态创建组件的! 自己定义CMP的finder定位器的问题 四舍五入问题 请教牛人,能不能发一段java中有关计时的程序 一个小问题,请大侠指点,立即给分!!! 关于三角函数的问题 一个三百年前已忘得一干二净的问题 打包!!!问题问题。。。在线..... 一个c的问题!! [100分求救]在Canvas或Applet上画的图应该怎样输出为jpg图象呢? 用VC的console application 到底能编多大的程序? 关于程序在初始化时候注册窗口类的问题? 上网很慢 请问从log文件里都能得到哪些信息? 系统设计一般把数据表放一个数据库中还是分到多个数据库中? 树型控件的问题,PB8.03版本,大家遇到过吗? 强烈支持雍亲王倒分!!(江湖无赖) 怎样调用VC写的DLL 同步 兄弟们,我的rh8中怎么没有中文输入法? 在access中如何用函数?我怎么找不到函数库啊。那里有关于access的函数库教程? 请教 我装的DELPHI7.0不知为何在区域设置为“英文”是看到的汉字都成了“????”? <iframe>如何改变大小? 关于水晶报表的问题!(急!!!!)(在线等待~~~~~~~~) 关于vb脚本中运用三角函数的问题 一个三百年前已忘得一干二净的问题 cbc+数据库的问题????????? 能不能控制<input type='fele' ...>的文件类型,如不可输入(readonly全部都不能用了) 在线等待:谁有个最简单的加密算法? 谁有More Effective中文电子书! 请教一段java计时器的问题(送分了) 在ASP中能不能引用.net的框架组件,能的话该怎么做? 占便宜歌 不想周末加班了,帮我啊兄弟们! 小弟是2003年毕业生,想找个软件工程师工作,不知道有什么要求? 一个简单的添加记录语句,求解! 求一篇武则天的无字碑的1000字左右作文不胜感激~~~~~~~~~ 你读了自己的花是让别人看这篇文章的读后感.300字大部分要说人人为我,我为人人 已知2-根号7的整数部分是a,小数部分是b,试求b(ab+6)的值 有关月亮的比喻句必须是自己造的 could you please buy _____drinks and snacks?could you please buy _____drinks and snacks?sorry .I do not have _____money .A.some ,any B.any ,any C.any ,some any可用于疑问,为什么不能选, “殄”这个字怎么读? bec高级水平是什么水平啊 could you please buy( )snacks( )drinks?填 some and还是any or 上面是号字下面是食字 ,上面是一个殄字下面是一个食字.这两个字怎么念是什么意思 武则天简史(200字内) 根据首字母完成单词:-Could you please buy some drinks and snacks?-No,I____(不同意) 他这么说是啥含义阿 武则天的评价(200字左右)简单评价了武则天的功过 7. Who is the girl _____ wearing a red dress?A. whose B. that C. whom D. that’s7. Who is the girl _____ wearing a red dress?  A. whose   B. that   C. whom   D. that’s为什么这道题选D? "殄"这个字读什么? 武则天50字介绍 英语组词成句:girl,young,who,red,is,in,that,(.) 男的一般这么说是什么意思啊.女的 22:35:33 有事么. 男的 22:37:44 没事,跟你聊会儿天 女的 22:39:02 你是坐那谁旁边那个男孩子. 男的 22:41:44 哎!聪明!呵呵 女的 22:42:15 呵呵. 男的 22:43:57 今我们 为武则天写碑文 200字 十万火急! 什么水平才能考BEC高级?我的英语六级只考了500分,听力比较弱这个水平可以考BEC高级吗?还是考BEC中级比较好?考中级对找工作有用吗? 殄文怎么读 月亮的比喻句要新鲜的,不要晓夜,残月如死神之镰,将白惨惨的光洒在破败的墓地上月亮像一把冰冷的尖刀,插入游子的心.弯弯的月儿小小的船,小小的船儿两头尖.月亮象小船,弯弯的两头尖; 月 一个英语句子的困惑similarly,a king's servant might not be the best one to write a biography of that king,but a foreigner might not have the knowledge and sympathy necessary to write the king's biography-not for a readership from within the k 一个美女主动和我视频 然后我 问她我丑不丑 她说 这都不是事.是事就一阵.一阵就一会儿.一会儿就完事 BEC 高级 听力哪位有BEC高级 第四辑 听力的材料MP3什么的,能不能发给我, 萎靡的读音萎靡 的读音 关于暴殄天物的殄是殄,不是殓 第二大题怎么写 BEC高级听力多少分大概能拿A 已知3+根号7/2的整数部分是a,小数部分是b,求500a^2+(1+根号7)ab+4的值 怎么写第二大题 求BEC高级听力(2-4辑)! 《春夜喜雨》中的“花重锦官城”中的‘重’字的读音. 第二大题,怎么写 bec高级听力不过还有希望过吗我考了2010年的高级bec,但是听力指定过不了,还有希望过吗,有没有考过高级的亲身经历听力没过但高级过了的同学啊. “一帆风顺”中“帆”的读音到底是第一声还是第二声?“帆”的拼音只有一个第一声的,为什么在“一帆风顺”中“帆”字大多数人都是第二声? 关于月亮的比喻句5.6句就好,但要生动,要长(也不要太长了,长一点就好) 河南省高一化学必修一拔高题多多益善,若是超过5题得就给5分,10题10分.答案也要 风靡全球发音?是不是第三声?靡 读第二声是不是只是 奢靡,其他全部第三声 关于月亮的比喻句耐心回答一下吧! 第二大题怎么写, 已知根号10的整数部分是a,小数部分是b,求a²+b²(谢谢, 喷洒氧化乐果农药与怀孕 医生请进.我在喷洒氧化乐果农药后一个月内.(未采取任何安全措施)我爱人怀孕了.奔三的人了.盼望孩子已久.现在孩子已经快两个月了.真是非常的担心.望高人指 第二大题怎么写求解啊! who is the girl ( ) red 氧化乐果农药放置时间长了会失效么?我是说超过保质期以后.有研究的可以给我留言,.我是学化学的,. 求解第二大题.短文填空 who is the girl a red hat? 八年级物理问题(关于电热的)为什么串联电路中导体放出的热量与电阻成正比,而并联电路中导体放出的热量却与电阻成反比?不要用物理公式来解释,用原理来解释!(我想到脑都爆了还没想 ----Could you please help me carry the box?Its too heavy.----( )A.Sorry.I have no time.S.Its my p为什么不选A呢 who is the girl ( )red there?A./ B.over C.with D.in 物理w=qu怎样记牢? 月亮升上来了比喻句 Could you help me buy some____(many)drinks and snacks. 我眼中的武则天1000字求求你们了!发发慈悲吧!再不告我就死翘了!谢谢了 BEC中级和6级哪个难 could you buy some drinks为什么用some,不是用any吗 一篇关于武则天的论文1000字 种出来的花上面有字看到在蛋里浇水能种出有字的花.不知道怎么种的.有谁在种给我联系好吗?先,提供可靠情报者,追加500分再说, 一个让人很困惑的英语句子---务必高手进As the bus began coming near the school I wondered what my teacher would be like .我还看在网上看到过这样的句子:As the bus began coming near to the school I wondered what my teacher
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘