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

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

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

作者:Android开发网


  今天我们继续就Android DDMS源码一起分析NIO非阻塞通讯方式,Android123也会给大家分享下手机和PC互通中的一些技术。在NIO中有关SocketChannel和ByteBuffer的使用细节,可以在今天文章中

   static void read(SocketChannel chan, byte[] data, int length, int timeout)
            throws TimeoutException, IOException {
        ByteBuffer buf = ByteBuffer.wrap(data, 0, length != -1 ? length : data.length); //从字节数组中实例化ByteBuffer
        int numWaits = 0;

        while (buf.position() != buf.limit()) {  //循环接收数据
            int count;

            count = chan.read(buf);
            if (count < 0) {
                    throw new IOException("EOF"); //读到末尾
            } else if (count == 0) {
                if (timeout != 0 && numWaits * WAIT_TIME > timeout) {
                    throw new TimeoutException();
                }
                 try {
                    Thread.sleep(WAIT_TIME);
                } catch (InterruptedException ie) {
                }
                numWaits++;
            } else {
                numWaits = 0;
            }
        }
    }

    有关SocketChannel的写操作,就是发送数据代码如下:

  static void write(SocketChannel chan, byte[] data, int length, int timeout)
            throws TimeoutException, IOException {
        ByteBuffer buf = ByteBuffer.wrap(data, 0, length != -1 ? length : data.length);
        int numWaits = 0;

        while (buf.position() != buf.limit()) {
            int count;

            count = chan.write(buf); //发送数据从ByteBuffer中
            if (count < 0) {
                       throw new IOException("channel EOF");
            } else if (count == 0) {
                             if (timeout != 0 && numWaits * WAIT_TIME > timeout) {
                            throw new TimeoutException();
                }
                 try {
                    Thread.sleep(WAIT_TIME);
                } catch (InterruptedException ie) {
                }
                numWaits++;
            } else {
                numWaits = 0;
            }
        }
    }

   有关ADB如何选择一个具体的设备,可以使用 setDevice 方法,这样当电脑中有模拟器或链接了多个手机,可以通过设备序列号,选择需要通讯的设备。

  static void setDevice(SocketChannel adbChan, IDevice device)
            throws TimeoutException, AdbCommandRejectedException, IOException {
        // if the device is not -1, then we first tell adb we're looking to talk
        // to a specific device
        if (device != null) {
            String msg = "host:transport:" + device.getSerialNumber(); // 最后的获取序列号,android123提示大家在adb命令中是adb get-serialno

            byte[] device_query = formAdbRequest(msg);

            write(adbChan, device_query);

            AdbResponse resp = readAdbResponse(adbChan, false /* readDiagString */);
            if (resp.okay == false) {
                throw new AdbCommandRejectedException(resp.message,
                        true/*errorDuringDeviceSelection*/);
            }
        }
    }

    通过PC控制手机重启的代码,当然这里需要Root权限才能执行

   public static void reboot(String into, InetSocketAddress adbSockAddr,
            Device device) throws TimeoutException, AdbCommandRejectedException, IOException {
        byte[] request;
        if (into == null) {
            request = formAdbRequest("reboot:"); //$NON-NLS-1$
        } else {
            request = formAdbRequest("reboot:" + into); //$NON-NLS-1$
        }

        SocketChannel adbChan = null;
        try {
            adbChan = SocketChannel.open(adbSockAddr);
            adbChan.configureBlocking(false);

            // if the device is not -1, then we first tell adb we're looking to talk
            // to a specific device
            setDevice(adbChan, device);

            write(adbChan, request);
        } finally {
            if (adbChan != null) {
                adbChan.close();
            }
        }
    }

  我们可以看到基本上,每个命令的执行,都是用了单独SocketChannel通过非阻塞方式执行,这样大大加强了并发,所以DDMS可以一边处理Logcat打印,显示堆信息,处理文件管理等等,有关NIO服务器的内容,Android开发网将着重分析MonitorThread.java这个文件,一起说下NIO的框架。

CCAI2015:首届中国人工智能大会将于7月26-27日在京举行 拥抱互联网+ 用友NC6助力集团企业蜕变数据驱动型公司 《近匠》融云,自主研发真正“不丢消息”的IM云服务 【CTO讲堂】听云CTO Wood:APM实现原理及对IT和产品运营的价值 从7个维度浅析虚拟现实Alpha年 Maker Faire上的微软:将技术与工具带给Maker才是关键 友盟2015年Q1移动互联网报告:车联网App崛起 多面编程语言Scala NEC高可用集群软件EXPRESSCLUSTER X3.3面向中国市场正式发布 【探秘ES6】系列专栏:模版字符串 专访图书作者祁宇:C++11让程序更简洁、更现代、更强大 滴滴打车CTO张博:生死战役,技术和时间赛跑 Qualcomm拥抱创客文化:如何基于DragonBoard 410c创造和创业? 【探秘ES6】系列专栏:剩余参数和默认参数 专访资深程序员庄晓立:我为什么要选择Rust? 主会讲师确认,2015中国人工智能大会火热报名中 容联&#183;云通讯线下沙龙:IM 5.0助力App社交化 【CTO讲堂】全数据驱动产品优化,美国互联网公司A/B测试经验分享 《近匠》易快报:以报销做企业消费场景下的Slack 纷享销客D轮融资1亿美金,启动开放平台战略! 专访4秒源码商城CTO陈杰:扎根互联网的“不安的心” iOS UIView动画实践(一):揭开Animation的神秘面纱 【前端人生】Teambition前端工程师陈涌:非计算机专业,依托社区不断成长壮大 iOS UIView动画实践(二):Spring Animation与人机交互 基因组与数据整合:DNA应用开发正在临近 2015 PHP框架调查结果出炉,Laravel最受欢迎! 【CTO会员专访】KEEN创始人兼CEO王琦:在GeekPwn,遇见一极棒的安全人才 创业公司都在使用的3款Python库 深入理解Objective-C的Runtime机制 你不知的Docker 创办人兼CTO游走美法的浪漫狂放 《近匠》环信CEO刘俊彦:移动客服的未来化场景 新手问题,在线等! 内存大小是否会影响到网络速度? 谁来救我 ,SOS,求用C语言写的编译器 修改数据出错,不知为何? 等级考试的问题 请问能不能在不同用户登陆的情况来决定服务A是否启动。 关于还原精灵转储后win98不能启动的问题,请指教!~ 今天,我终于听到项目经理的一句内心话,让我们作为程序员感到一阵阵的寒心 请教一下 dll调试问题 怎样得到OnLButtonDown的point在整个屏幕上的坐标啊?谢谢 递归调用FindFirstFile、FindNextFile、FindClose的问题 页面调度有关的课程设计 关于client端与server端的连接问题 请问能不能在不同用户登陆的情况来决定服务A是否启动。 Textbox如何禁止它记忆以前曾经输入过的值? 我的XP的CPU经常占用90%以上,高手指点. 安装完win2000,又安装了天网防火墙,再安装SQL server 2000,快完成时启动服务警告“无法定位程序输入点” 急招深圳周边(含深圳).Net程序员 ??qustion Laney(6吨大肥猫) 快来啊^@^ 有关struts的<html:text>标签的问题!!!!!!!!!!!!!!!!!!!!!!! 为了考试挑灯夜读,遇到一个菜问题请大家帮忙! 哪位高手帮帮我!时间紧急! 关于还原精灵转储后win98不能启动的问题,请指教!~ 有几张漂亮图片,看看你的计算机是怎么累死的 求C++算法代码。 怎么实现在IE中将查找到的关键字用红色标记指示出来? 求C++算法代码。 请问哪里可以下载Numega DevPartenr Studio 测试工具 ㊣㊣ 什么也不多说了,帮忙给解决这个问题吧, 先多谢了!! ㊣㊣ 有个小小问题 寻找监测某端口的数据流量软件 都市幽灵·里面一定有宝藏 非常奇怪:为什么超链接无效? 显示异常 下个星期开始到新公司了,请大家给点经验,好吗 急!jsp+mysql,急寻blob输出方法!!! 修改记录问题 StringGrid的自画 导出 救命呀,关于XP的激活问题. 语句 请问有什么好的串口调试工具,可以模拟串口发送数据的??????? 简单问题高分相送 MessageBox.Show 方法需要什么样的名空间 使用ghost硬盘刻录硬盘怎么区分源盘和目标盘,请大虾详细说说,在线等 概念性问题(没办法,太笨了,见笑了) vf8支持动态SQL吗? 请问:如何单独安装BDE? 因为你无权连接数据库服务器?? 高一数学题目..不会 ..求解1.已知U=R,A{X∈R|1<X<4} B={X∈R|X≤-1 或 X≥3},求CuA和CuB2.已知全集U={0,2,a的平方+2a+3} A={0,2} CuA={1,2},求a的值3.已知集合A={X∈R| 1≤X≤5} B={X∈R| a≤X≤2a+1} 且A≥B,求a的 少昊、颛顼、帝喾、.尧、舜他们还有官名吗 感觉很简单,但是我就是不知如何下手 时光荏苒,怎么念 为什么希腊是现代科学精神的起源? 与象共舞 大象跳舞给人的感觉是什么 品读经典,完成下面的填空.1.《水浒》中的主要人物有:行者______,花和尚______,黑旋风______. 黄帝、颛顼、帝喾、尧、舜庙宇在什么地方 大学对于我们的意义,请谈谈你的看法吧! 世界的统一性问题中,何谓一元论?何谓二元论?如题,要确切.重点是一元论与二元论. The most chershed Thing in life is friendship The most precious thing Between us怎么翻译没什么难度吧! 对大学社团的看法 论述世界统一性原理是唯物一元论的前提和基础 Sincere forever,the friendship forevtr,the dearones forever,love forever ls 明珠散落的意思解释对了就好了~ 世界的统一性在于它的什么 小明先向东走了5米,又向西走了3米,一共向东走了多少米?如果规定向东的方向为正方向 对大学教学的看法?还有理想的大学教学是怎样的?大学教与学的灵魂? 高一数学题 谢谢了诶~1.如果loga2>logb2>0,那么( )A.1 电视上哪个频道讲有关天文的知识 6题..文科学霸请进……为什么c不对 高一数学诶……泪流满面求指导做前三道就好了 我承认我问题很多==请给详细解释 谢谢 关于天文的知识不少于8条字数不少于260字每条不一样 大概的相近词是什么 指出句子所运用的修辞手法:1.他正向古代典籍钻探,有如向地壳寻求宝藏 2.闻先生大无畏地在群众大会上,骂特务,慷慨淋漓,并指着这群败类说:你们站出来!你们站出来!阅读题:1.仰之弥高,越 《大道之行也》全篇课文的断句 问下问数学题目说出来吧,我在此先谢谢了1e 人情冷暖 世态炎凉 是什么意思 Mr Smith often helps the poor people.He is a man with a kind h_____________Mr Smith often helps the poor people.He is a man with a kind h_____________ 一人向东走20米,又向西走了30米,实际走了多少米?他此时的位置应在哪里? 翻译成英语 人情冷暖世态炎凉 “三皇五帝”中为何把炎帝划分在“三皇”里,而黄帝划分在“五帝”里在中国通史远古时期传说中,黄帝和炎帝同为有典氏的儿子,都是很杰出很有名望的部落酋长,为什么“三皇五帝”里把黄 一位同学在一条由东向西的跑道上先向东走了20米又向西走了30米能否确定他现在的位置与原来位置相距多少米 世态炎凉鸡最懂,人情冷暖鸭先知. 三皇的“天皇”、“地皇”、“泰皇”,和“伏羲”、“神农”、“黄帝”.是一样的么?如题 一位同学在一条由东向西的跑道上,先向东走了20米又向西走了30米能否确定他现在的位置与原来位置相距多少米 翻译 企业文化我们企业是以位置相关的各种信息的应用与发展,维持与改善人类生活作为企业发展方向和坚定不移的目标.把位置相关的信息领域所取得的成就做为我们衡量一起活动的标准. 三皇中的“黄帝”与五帝中的“黄帝”是否一样? 某人向东走5米,又向西走5米,那么此人实际走了多少米?他的位置是在?请帮助帮助回答,谢谢!这道题我不知道该怎么写,请来帮助我把! 念天地之悠悠,独怆然而涕下.神木意思? 某天文观察者观看到下列现象,依据天体的相对位置判断,不可信的是.白天看到日食,同一天晚上看到月食为啥不对,日落后既看到火星又看到木星为啥对?跟剧天体的相对位置判断 某人向东走了20米,又向西走了30米,实际走了多少米?这是一个关于有理数的数学问题主要是要弄清实际说的是路程还是距离 翻译:念天地之悠悠,独怆然而涕下 关于天文星象的基础问题:是根据什么判断一个星次里边有二十八宿中的哪几个呢?比如说正月,如果在正月的时候观星,是在黄昏的时候太阳落山的西方出现的星宿属于娵訾吗?是我没有表达清 已知X十y=5⃣️Xy=2⃣️求(x-y)^2.x^4+y^4的值 在经济繁荣时期和萧条时期因怎样分别运用财政政策? Taking your measurements won't help when it comes to picking your size 若丨x-3丨+丨y-2丨=0,试求2x+y的值 如何提高学前教育经济效益 英语翻译when it comes to 一般在什么时候用的 若丨x丨=3,丨y丨=5,且丨x-y丨=-(x-y).求丨x-3丨+(y-5)²的值 怎么写学前教育专业学习情况? 黄帝姓公孙,根据司马迁史记记载,为何其孙,孙之孙颛顼和帝喾都姓高,即高阳和高辛. 已知丨x-2丨+丨y+2丨=0,求 x,y的值要用上初中因为所以的符号,具体点 这是科学,请学霸帮我,谢谢! 请从语法角度分析.The date marks the end of...the date marks the end of one of the periods of roughly 400 years into which the Mayan calender is divided. Your Personal Day of Death is... Tuesday, April 9, 2075 Seconds left to live...2,120,323,716 Delay Your Date of Death How Migraines Impact Quality of Life Gastroesophageal Reflux Disease: What You Should Know A Lack of Sleep or ADHD? 都是什么 为什么在发达的资本主义国家美国马列主义著作有一定的市场 能帮我翻译一下这个句子吗?at the end of an income year ending on the date of death Your Personal Day of Death is... Friday, August 8, 2081什么意思?Delay Your Date of Death The Phases of Migraines What to Expect When Getting an MRI Polycystic Ovary Syndrome: What You Should Know 这都啥意思? 白宫网页万人请愿 辱华节目被删除日本明治乳业退出中国 竞争激化成本上杭城遭遇八面“霾”伏 PM2.5为中杭州诞生“黑白配”羊驼 被称羊驼中的打破行业“潜规则” 温岭取消抵押贷款宁波市财政每年新增资金3000万元扶少女被人勒昏剪掉双侧乳头 嫌疑人自称男子住宾馆强奸隔壁女子后回原房间睡觉十八届三中全会前瞻:三大焦点构建中国李雪主成为朝第一夫人 传因长得像金正监听丑闻引盟友提高“炮轰” 美国公信突尼斯举办中国电影节温州经济三季报让人眼前一亮 GDP同白宫拒回答是否曾监听默克尔 美德信任朝韩在非军事方面保持合作 朝鲜遣返6供应杭城70%生鲜猪肉 滨江区昨再查冷空气吹开雾霾带来降温 这两天早晨只朝鲜表态强化核力量 美韩揣测朝“核冒国考报名昨天截止 浙江最热门职位33日本媒体爆料杭州绿城主帅冈田武史将离临安破获特大涉毒涉枪案 缴获整枪43陕西球迷心中滋味谁知(图)我做了良心让我去做的事(图)“天明导演快乐远行”告别仪式今日举行北新实小开展《野生动植物大课堂》教育快讯育德才兼备创新人才高新顺江学校开展“百家讲坛”讲交通安真心为师 为学生奉献青春张静初首当制片“不怕花钱”她们撑起成都教育半边天清泉学校关爱留守儿童勇攀教学“高峰”都教授不该这么纯龙泉一中表彰2013年巾帼文明岗标兵马家河小学举行学习铿锵玫瑰 育人无痕春光耀华建 德慧绽繁花做孩子的开心果以教师之美 盘活“三星教育”全省唯一女子中学 女生班“因性施教”张春贤:新疆问题长期复杂、急不得
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘