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

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

舒迅:产品经理必读的九步法 独家爆料:Facebook移动客户端开发揭秘 一个独立开发者的自白:我如何在一年赚得60万美元 Dropbox收购Snapjoy 意欲打造媒体中心 2012世界“末日”:有经过正确的分析吗?! 23.5亿美元!谷歌出售摩托罗拉机顶盒业务 两家巨头相继放弃移动广告,移动广告形势堪忧? 应用洗牌,还能免费多久?Google推出iPad版Quickoffice 2012末日APP推荐 求生自救必备! Windows8上网利器 不卡死的IE10浏览器 为何Java程序员学习Clojure有优势? 我们是如何阅读代码的? “热水冷却”技术将主导美国国防部数据中心改造 程序员想玩转大数据:需要知晓的12种工具 2012年谷歌应用商店增长迅速 但苹果最赚钱 Apple微软Google都在竞购一家创业公司 违反新条款?苹果强行下架AppShopper 2012移动开发教程盘点:最棒的国外游戏开发站 重思JavaScript的好与坏 细数那些 NeXT 留给 OS X 的遗产 一张图让你知道大数据的生态系统 Camera360开放SDK:拍照和滤镜一行代码搞定 一周消息树:计算机将拥有五感 人类面临威胁? 通晓数学的人就可以当程序员吗? 360发布企业版4.0 可自定义软件白名单 不要总是依赖机器 MongoDB扩展彰显分片功夫 Dell与HP的OpenStack的战略:渠道对抗SLA 路况电台王雷:未来车载系统会是Android的天下 移动周报:2012移动开发工具系列盘点 谷歌不愿错失机会 Android或不再成它人独享 黑客文化:Facebook公布2012年Hackathon大赛顶级“黑客作品” 关于Request的问题 向高手请教一些专业网址! 网络IP前后不一样 如何查看csdn的精华帖子? [原创]VC#.NET:XML代码注释在智能感应中的使用 怎样在WIN98下不重新启动就可以删除打印处理器文件? 批量复制数据问题,access数据库 在页面中现实数据库的一个字段(大量的文本),用什么最好?? 一些问题,希望大家给点指点! 谁有那种实现股票走势图/趋势图的那种控件 如何控制随意修改个人IP地址 如何叠加两幅大小相等的图片成为一幅图片?其中上面的图片有透明的部分。 请教一个小小的时钟程序 爱情?亲情?友情? COM+问题 请问有关group by,并且insert数据的问题. 如何设置edit中的内容自动折行,能出现垂直滚动条???在线等待!!! 关于在DLL中使用Mscom控件的问题 如何將字符串以十六進制的形式顯示在Edit中 关于SOCK5代理服务器的第二次协商问题? 为什么oracle的sql语句的表名必须加“”??? 谁能解决工具条中的一问题?50分相送 ##### 100分求教:如何实现框架集下页面的定向输出?##### 菜单菜单!!! 如何用Schema验证XML文档 JSP中jsp文件和bean的class文件的相对位置是怎么样啊? excel中的两个问题:1、如何关闭userForm1窗口?2、如何在打开userForm1窗口时使主窗口最小化? Dll函数问题 咋判断用户点的四点能围成一个四边形? 网站中的某一页嵌入VB的AtiveX 控件,客户端能访问网站,但不能打开AtiveX控件。。。高分 请问怎么把 string 型转换成 System.Data.SqlDbType 型? 机器无法启动 主板有问题吗 高分请教 创建不了C#Web项目,急!!!(刚学C#) [求助] 用fopen函数读不出URL文件? 怎么判断listview是否有一个item被选中? 请说一下硬盘容量和内存容量的关系! ▄▅▆▇█ 水园的大背景离不开吵架 █▇▆▅▄ 请教mm有个问题! linux下的编程问题 以Oracle为例说明如何通过ODBC将数据库中的指定表导出到MDB数据库。(原创) 关于一种特殊按钮 SQL语句小问题!!在线等待! 想学ColdFusion 请看我的转载的贴子 Troj_Hacline.A是什么病毒? 关于XML的问题,150分赠送,急 dll问题。很简单。 感慨!!!(潜水一年,吐个泡,顺便发表一点意见) 帮个忙 怎么在Installshield中创建对话框,并操作ACCESS数据库? 连续给分:邮件服务器防病毒问题! 嗯啊称赞的反义词是什么 有哪些现象可以说名地球是圆的? 氨气显什么酸碱性? 求描写古代院落的段落要写的唯美,要有秋天的元素,不要含人物的 能通过日常现象看出地球是圆的吗? 什么是广义勾股定理? 段文写T或F 明治维新成功最重要原因是什么 广义勾股定理的证明及依据 30岁未婚男人心理认识了一个30岁的未婚男,是个白羊.觉得不错可是却不知道怎么交往,苦恼.他总是不愠不火的,猜不透他在想什么.我不了解这个年龄的人在想什么(他70后我80后,不过没什么大 明治维新成功最主要原因 1.地球如果不自转,会有什么现象?地球如果不公转,会有什么现象?这是五年级下册的科学题目,我不是很明白.希望大家教教我,我明天期末考啊!1.我想知道具体的,正确的,2.重点是分别会出现 看看这篇段文怎么做动物的奇特语言(1)人类的信息交流离不开语言.那么,动物有没有“语言”呢?常言说:“人有人言,兽有兽语.”所谓动物的“语言”,一般是指同一种动物之间为了种群的 关于周长和面积和体积的各形状的计算公式以及定理 算命的说我是桃花命,请问什么是桃花命啊 这篇阅读段文怎样做? 半圆的周长与面积,公式是什么,原理是什么? 12个月的花 像一月水仙清水养 二月杏花伸出墙 三月桃花红艳艳 然后4月 5 6 7 8 9 . NBA这个词的全拼 明治维新成功的原因是什么 如图 AB=AC BE=CD 求证 ME=MD 完成段文 综合明治维新成功的原因要结合相关史实 23.如图所示,点D是线段AB的中点,点C是线段AB的垂直平分线上任意一点,DE丄AC于点E,DF丄BC于点F.(1)求证:CE=CF(2)点C运动到什么位置时,四边形CEDF成为正方形?请说明理由. 电子商务是什么啊?它现在有定义吗?现在也不知道? ABC干粉灭火器有2、4、8、30、35公斤的 还有多少公斤的? REACH法规,有毒有害物质化学检测 南京瑞旭竭诚欢迎你 025-58390414? 否字用全拼怎么打 天体视运动和天体周日视运动的该怎么理解 根据实验测定;高度每增加一千米,气温大约降低六度.某登山运动员在攀登珠穆拉马蜂地途中发回信息,报告它所在的气温为-15°c,如果当时的地面温度是三°c登山运动员所在的位置的高度能确 嫂字全拼怎么打 熊的分类…? 若把一张厚0.1毫米的人民日报连续对折32次,它的高度可以和珠穆拉马蜂的高度8844米还高相信或不相信说明理 电饭锅功率不一样磁钢是否也不同我有一个1800瓦的电饭锅,还有一个800瓦的电饭锅,它们的磁钢是否能通用,磁钢是否也分功率大小? 公理与公设的区别 人体什么东西含水最多啊 雾字全拼怎么打 公设公理是一个意思吗? 世界上什么东西真正的不含水? 电饭煲磁钢的接触点根本看不见,怎么能处理触点呢? Bear/小熊 JSQ-A30A2 超声波静音空气加湿器评价高吗 特斯拉线圈能当微波炉用吗,也就是说它可以加热含水的东西吗? 街字用全拼分开成3个字怎么打 地球可以打穿吗? 为什么男人压力那么大? 修字的全拼怎么打 地质勘探能把地球打穿吗 以三角形的两边AC,AB为边向外做正方形ACDE和正方形ABGF,M为BC的中点,求证:AM垂直EF 电子商务刷.单.有知道的么?我们不仅要学会欣赏,还要学会接受别人的欣赏.任何事物都是两面的,我们切忌“捧杀”!伤仲永的故事不就是不会接受欣赏的恶果吗?现在也有许多神童被埋没的教 打穿地球地球是悬在宇宙中的我们通常去外太空是从地上起飞到外太空,那我们把地球打一个对穿的洞的话会不会可能从这个洞中也能到外太空呢 如图15-1分别以△ABC的边AB、AC为边做正方形ABGF和正方形ACDE,连接AG、AD,为AG中点,M喂AD中点,K为BC中分别以△ABC的边AB、AC为边做正方形ABGF和正方形ACDE,连接AG、AD,N为AG中点,M为AD中点,K为BC中 电饭锅感温磁钢和外壳由弹簧支撑,在按钮未按下时,弹簧是原长还是压缩? 日本的明治维新是在什么样的口号下记进行的? 20.如图,分别以△ABC的边AB、AC为边作正方形ABGF和正方形ACDE,连接AG、AD,N为AG中点,M为AD中点,K为BC 线段AB上有两点M,N.M平分AB.AM:BM=5:11,AN:BN=5:7,求AB 日本明治维新成功的原因是什么? 与桃花有关的典故就是关于新的开始啊、开端的一个典故或者是成语注意要和桃花有关 若点M是线段AB的中点,点N是线段BM的中点,则AN= AB REACH73已正式公布了,以后REACH要测73项了?REACH73测试费用及周期是? 珠穆朗马蜂有多高尽量精确 韩外长:日本错误历史认知阻碍韩日关系日知名主播之子因盗窃被解雇 检方暂不奥巴马提名两名竞选支持者为美国驻外大韩在独岛海域清理垃圾17吨 吁居民游日土发表共同宣言 安倍决心加强战略伙意大利比萨斜塔修复见成效 12年扶正美称法国西班牙自行实施电子窃听行动 美称法国西班牙自行实施电子窃听行动 外媒:美联储资产规模恢复正常至少要到乌克兰法院裁定没收季莫申科女儿名下饭美国最新型隐身驱逐舰下水 因价格太贵欧洲多国遭风暴袭击 死亡人数已升至1食品安全法拟修改:消费者获赔最低千元日研究机构预测南海沟大震将致大阪13鲁炜要求网络媒体讲好百姓寻梦、追梦、前三季28省GDP已超全国3.7万亿卫计委回应放开“单独”二胎 表示尚无公务员养老制度新改革:养老“双轨制”学者称廉洁年金难反腐:传统文化缺少公中纪委面向全国征集廉政漫画 要鞭挞腐原标题:黑龙江一公安局欠债18年不还爸爸走了 孩子们的家也没了牡丹犹盛 琼花已开沪市成交超万亿致爆表看今日沪深两市戏批发零售业网上销售量翻番双墩镇“三线三边”焕新颜长丰将成为 合肥副中心城区ATM机设到村民家门口2.3米男子娶1.5米新娘:我们的爱新疆记协推荐参加第二十五届中国新闻奖中国绝技“锦灰堆”举行海外首展2015年世界沙滩排球巡回赛福州开赛政改方案即将公布 港府争取议员支持前国民党副主席詹春柏、胡志强河南新郑万隆精神有望获得新发展北京今年将实施“离境退税”政策乌鲁木齐市天山区法院开展参观毛泽民故北京一居民家中起火 一独居老人身亡受惠于大陆市场 台湾联发科登全球第十中美两家公司购得加拿大太阳马戏团多数弗格森事件报道获普利策突发新闻摄影奖“社区糖尿病全程管理适宜技术培训项目
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘