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

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的框架。

一周热点:摩尔定律让位于贝索斯定律 阿里巴巴集团CTO王坚确认出席第六届中国云计算大会 【走近讲师】青云甘泉:混合云的构建及其对企业的帮助 RadiumOne创始人兼CEO因家暴被公司解雇 3D打印狂潮:可检测皮肤疾病的低价手机显微镜 浅谈导航设计,开发者必备的十大实用技巧 【云先锋 41】上海越诚:基于云服务的建站类iService软件超市 董西成:Hadoop将在高速发展和完善中扩大优势! 【走近讲师】 华云数据郁珉:公有云市场八仙过海 价格不是唯一标准! Facebook、Twitter、Google移动广告之争 开发者的黄金时代=运维人员的恶梦? 研发团队平稳度过“从小到大”并非易事 诺基亚品牌手机不久将消失 Stephen Elop回应不是木马 看七家科技公司Logo的最初模样 移动UI框架Fries:私人定制最Sexy的用户界面 必须Mark!最佳HTML5应用开发工具推荐 百度技术开放日感悟:看百度如何获取大数据时代的“船票” 谷歌亚马逊微软的烧钱游戏 拉手网CTO官冲:团购网在大数据应用上的探索 究竟谁真正关心比特币,不妨看看基于大数据的百万条推特分析 Firefox 29正式版:高度自定义模式、全新菜单和Australis UI 冼茂源:HBase在垂直搜索业务以及数据存储中的应用! 阿里云计算北京布点 全球第三个云数据中心开放 【走近讲师】友友天宇CEO姚宏宇:与行业结合是私有云厂商的重要出路 万亿移动支付产业的难点和痛点 削减硬件运营成本?亚马逊或自主研发ARM架构芯片 开源框架eMobc:XML开发原生移动应用so easy iOS应用安全开发,你不知道的那些事 市场化API的十个捷径 MongoDB和Cloudera结盟,欲征服大数据市场 红帽收购Inktank,将统一Gluster与Ceph? 关于例外 给Cisco认证提点建议!给分===== [求教]XML文档的参数中如有&符号如何处理。 [求教]XML文档的参数中如有&符号如何处理。 谁能给我提供免费防刷新的计数器代码……在线等待 请问出现下列错误,如何解决!(怎样察看每个OLE DB状态值) 会话状态设置中的SQLServer 模式如何应用? BUG!版主管理里的专题管理 session 没设置正确,请蝈蝈看看 有朋友问我学习C语言初中学历能学会吗? 大家帮个忙,很简单的问题,快呀,关于数据库的问题 请问vb怎么打开Access2000的数据库? 计算机并行口原理是什么 我在前台的程序中对text1.text=rs!number,为何text1.text的值还是空值,想不通??? GetSafeHdc() 的含义及用法 一个调用SQL数据库的问题! 如何ML一个装载地址不是4M的EXE文件(比如6M或8M) 谁能说说从一个ListView拖动文件到另一个ListView中 如何在程序结束时播放一段动画再结束!!!!! 我要书 下面是我的存储过程,为什么多人操作的时候会发生死锁呢,急呀! 谁知道炖鸡怎么炖啊?加什么料? 如何使鼠标点到对话框外时关闭对话框?(方法越多越好) 国家安全部门使用什么操作系统? “用户级虚拟机”调试应用程序的有几种实现方式,谁能说说???? 如何优化程序,使他减小占用系统资源? 请问怎样同时显示简体和繁体汉字? 我想查找字段为'注册类型'中包含'公司'的所以有记录 帮帮忙,SQL Script Recovery如何获得注册码? 如何“引用结构中的结构的数据”,比如MSG中的POINT鼠标结构 用一个Query动态生成并执行SQL语句 哪里可以下载到有关oracle 9i的电子书? 存储过程生成的数据窗口,如何在窗口中直接使用 prc扩展名的文件如何打开? 用vb在任务拦里靠系统时间的地方自己的程序添加一个图标用什么函数? 我用100分来搜集图形处理编程的网站及经典介绍。 请问哪儿有整理c++代码的源程序下载? 为什么这个NOTATION声明有错 如何在c语言里面定义快捷键 如何在c语言里面定义快捷键 如何用php实现全屏打开一个窗口??? 在线求救,SQL的sqlserver.exe进程怎么会无限增大直至系统瘫痪!SOS! MEMO中的光标 如何全选DBGrid中的所有记录呢?? 请高手帮忙翻译一下"" 在线等待,有分给哟! 我来提个问题:如何获取焦点所在控件(在另一应用程序上)的句柄? 为什么不能编译? 怎样知道共享上网中具体一台机器的IP地址 服务器端动态生成javascript,可行吗? 散分! servlet如果输出一个图像到一个web page?300分 我的数据库突然崩溃了,不知道是什么原因? 英语口语课前演讲稿 3分钟以内英语口语课课前演讲稿3分钟以内希望题材是大家都感兴趣 新颖的最好可以留下好印象的 温暖怀抱的形状答案说说题目的含义第4段“坐在马上的我,却惊诧不已”,我“惊诧不已”的原因是什么第8段老师说“你看,连蒲公英都要等种子成熟了,才让他们飞走”,老师的言外之意是什么 英语翻译The grass is always greener on the other side of the fence Too many cooks spoil the broth You can lead a horse to water ,but you can't make him drink You'll catch more flies with honey than with vinegar 如何用英文介绍Tracy这个英文名 Enjoy your life 怎么读? The grass is always greener on the other side. tracy在英文名中的含义 谁知道"enjoy your digital He is ________ of the two boys.(tall) 填什么.写理由. 30分!一个平行四边形,底是12厘米,比高长20%,这个平行四边形的面积是多少平方厘米?一个平行四边形.底是12厘米,比高长20%,这个平行四边形的面积是多少平方厘米?我明天要交.为了你心爱的分数 He is _____ in the class.(tall) He is tall _for_ a boy _of__ ten.填这两个词语法上怎么解释呢? 我想要一篇3分钟以内的演讲稿,题目是《如果可以》中文的.还有一篇英文的,《tears behind the smile> He is tall,but he is not (tall)in his class he is the cleverer of the two boys.其中为什么是比较级?这样的题一般是考察什么? 憎恨和报复社会 英语翻译对不起,我看错了,应该是work hard Michael ,and you will make good progress It was not immediately obvious that water was to be fundamental to the develoment of life.怎么翻译 我对这个社会极度不满,我想报复社会,这个社会太不公平,我他妈的就想杀人.我没有朋友,我的家人也不理解我 have problem with sth造句? GIVE ME A BREAK的中文意思?这是句美国俗语,确切意思不太清楚~望告之~ 罗斯福总统是如何受到仆人爱戴的 ( )tall boy he is in your class?Jim is.He‘s()than all the other students in his classA.how B.what a C.what D.how a要有解析 Just Give Me a Reason翻译一下中文是什么意思 大学英语口语大赛3分钟演讲稿子我是大一学生,参加英语口语大赛决赛急需3分钟演讲稿,最好有气势一些, 用适当形式填空. He is one of the_______(tall)boys in his class.急捺!~ just give me a break什么意思?拜托各位大神 罗斯福总统简介 英语翻译例如 "我删除了一个由Tom下载的电影."1.I deleted a movie that was downloaded by Tom.2.I deleted a movie downloaded by Tom.第一种是标准形式 ,第二种感觉比较随意,有这种写法吗?2的写法正确吗? 求 写自己好习惯的英语作文,30词以上.作文形式简单一些. 罗斯福当了几年总统? 麦迪的英文名McGRADY中C为什么是小写的? 寒假中的一件趣事我去北京了(五天),给我一篇关于北京的趣事. 罗斯福当了几届总统 tracy mcgrady怎么读啊?最好用中文弄过来我的意思是用汉语读他的英语名字 英语作文“积极思考能成为一个好习惯”,求大神来一篇,150字左右 adversity is a natural part of life,and must be accepted.翻译 Tracy McGrady怎么读,音标的是音标啊 l hope you ll enjoy your visit 明天就要了 舍不得放手怎么办啊 德语“亲爱的”怎么写?对男的说 寒假趣事500 英语翻译1 《温暖的扑克》阅读答案 李丹崖写的1.文章叙述了一件事,从不同的角度可以作不同的归纳概括.请你按照下面的要求作简答概括.(1)白衣女孩:(2)老爷爷:(3)我和朋友:2.读下面的句 寒假趣事600子或500子以内谢谢 因喜欢而舍不得放手的成语 温暖的扑克,快,答对了我的分很高7、本文叙述了白衣女孩的一件什么事?请你用简洁的语言概括.(2分)8、“就在我们走到拐角的时候,一个六旬左右的老伯突然蹿出来拦住了我们.”句中加点 have something to do with 与 be related to 的区别have something to do with 与 be related to都是与什么有关的意思,他们在用法上有什么区别? 我想去海边走走用英语怎么说 have to do sth 句型造句 含定语从句 翻译1他考试没及格,这让他妈妈很伤心【which指代整句,非限制性定从】2她就是那个女孩,她父亲是我国著名科学家【whose】3 手机是一种能够帮助人们互相沟通的仪器【which/that】4 我最愉快的事情就是去海边用英语怎么说 have sth to do的造句 A和B有关系吗?可以这么翻译吗 Does A have something to do with B Is A related to B 我将要去海边.用英语怎么说 温暖怀抱的形状, 有什么事我能帮你吗?用定语从句翻译 急需一片3分钟之内的英语口语演讲稿, 爱是温暖怀抱的形状阅读题答案 1.“哈桑大惊,匆匆把马拴在树上,只满怀歉疚地向我说了声对不起,便一头钻 英语翻译1.刚才与你交谈的那个人是我们公司的一个工程师2.我仍然记得我们一起在学校学习的那些日子3.在巴黎生活50年后,拉回到了他生长的小村庄4.你能告诉我上周我们参观的那家工厂的
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘