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

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

移动周报:找你妹版权战、访俄民手游、GitHub游记终回 一周消息树:1月23日全国顶级域名根服务器疑遭黑客攻击 影响巨大 下一代互联网搭建技术:高空气球,无人机,又或是卫星? 红帽认证总监:10个架构师里有4个在中国 数据中心优化的5个途径:软件定义、云计算等 收购诺基亚,微软能否再度崛起? 一周热点:阿里专家深度解析分布式系统,美团数据挖掘工程师分析企业大数据 独立游戏节:学生展示优胜者奖项得主揭晓 专访Meetup Andres Glusman:解析UX、精益创业方法论背后的强大力量 开发者不容错过的12款开源JavaScript库 搭载FusionCube,HANA内存计算助力实时运营 叫板Google,VMware15亿美元收购AirWatch强势布局物联网 2014年IT企业招聘调查报告:外资企业招聘规模偏大、技术人员比重高 小机器人Ozobot:Maybe,我也有禅意 Google 4亿美元收购人工智能初创公司DeepMind 加入初创企业前,自问四个问题 King.com维权 上演“贼喊捉贼” 淘宝:HBase Bulkload bug修复及patch提交 Google的“机器人情结”:两次合计36亿美元的人工智能收购 挑战谷歌、抢占新兴市场,百度进军泰国、巴西和埃及市场 《近匠》第8期:Unity——不再仅仅是游戏引擎 Colours:移动应用的开源“美颜相机” 微信红包活动:用户疯狂中的腾讯“阴谋” 预测2014年最热门的IT职位及年薪 智能手机有隐私?Facebook可阅读Android用户的短信内容 苹果2014年Q1财报:iPhone、iPad 销量创纪录 3D打印:鞋垫也玩私人订制 与Google Glass抗衡,三星将推Galaxy Glass 进军移动?任天堂欲推iOS、Android版超级玛丽 回顾2013:云计算的夏天 微软最终加入OCP阵营,开源其云服务器设计 为什么在excel表中可以看到的数字,用data连接后,在text和dbgrid中却看不到。(只显示出了其中的一部分) 简单问题,关于toolbar CTime类型变量的值存到数据库中datetime类型的小问题! vc怎样打开access数据库!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !求助,我的机子不能启动了。。。 XML中华网有好多的C#资料哦! 比较问题一道,关于 == 版主请进 ~ CrystalReport的一个奇怪的问题,Help! 唉,终于解决不了了,如何在运行时,改变LISTBOX的风格。MSDN说不能解决 AnsiString与TStrings之间的区别与联系,急! 有谁知道下载cobol的编译器,能在window下用的 各位兄弟、姐妹,谁能给我一个超星的账号阿!!谢谢了 再请教 Delphi的EXE 请问关于数组的问题 机器的速度太快,玩不了挖金子,有什么办法? web应用中使用Window ActiveX OCX技术存在问题 请教灰色凹下直线问题 jbuilder编译的问题 有关网络视频会议系统的开发模型问题??? 如何实现在DW中取数据? 如何注册一个DCOM,让它跑在别的机子上? 关于条码阅读器输入数据的控件 如何注册一个DCOM,让它跑在别的机子上? 开机后,总是弹出了一个窗口? 闲着没事,贴个歌词,先~~~ editbox控件问题 Delphi6安装之后怎么会… 请教一个非常难的问题,请高手入席! 如何实现在DW中取数据? 请教:我在CMyView中的菜单消息响应函数中调用一个对话框,为什么有的能打开,有的对话框打不开? 取消ADO大批量查询的问题 如何设置临时文件夹目录? 关于条码阅读器输入数据的控件 请问高级程序员考试什么开始报名在哪报? 如何捕获子线程中的Exception 请 li zhifu(东北人)进来看!!!!! VC简单问题来者有分!转换DDB到DIB 求《数据结构与算法(C#版)》:电子工业出版社. 多谢!!!!! access数据库里备注字段用英文怎么写 如何导入excel文件成为一个SQL表 莫名其妙的问题,DeleteBatch is not a member of TDBBaseSODetail 第一个告帮我怎么进入boland新闻组的人,100大分全给他! 请教高手!如何在属性页的标题上添加图标 CSDN上一个木马的源代码,我有疑问? EXCEL文件的导入 怎样在VC的添加虚拟函数或消息函数向导对话框中加入自己的虚函数和自定义函数 请教高手!如何在视图区附加一属性表(PropertySheet),使属性表覆盖窗口的视图区 选择release编译时出错 请教各位高手一个随机数的问题 一物体做匀加速直线运动,初速度为0.5m/s,第7s内的位移比第5s内的位移多4m.求:(1)物体的加速度(2)物体在5s内的位移 什么是流体边界层分离 胶粒为何带电在胶体中存在的微粒准确地说是胶团,胶体就是由胶团组成的.胶团是由胶核、吸附层、扩散层构成的.胶核又是由许多分子或其他微粒聚集而成的,它具有强吸附能力,在胶核的外 做匀变速运动的物体在各个连续相等的时间t内的位移分别是s1,s2,s3,.sn,如果加速度是a,则证明s4-s1=s5-s2=s6-s3=.sn-s(n-1)=3at2(写出具体过程) 对于层流边界层,_和 _都将加速边界层的分离(A)减少逆压梯度和减少运动粘滞系数 (B)增加逆压梯度和减少运动粘滞系数(C)减少逆压梯度和增加运动粘滞系数 (D)增加逆压梯度和增加 为什么土壤胶粒带电? 玻璃钢管的重量怎么算?工作中遇到难题了请帮帮忙!模具长6米 直径150mm ,要缠5毫米厚的玻璃钢管,3mm的纤维丝 中间加2mm的沙子 请问沙子的重量怎么算 是要模具上缠复合型管,然后再从模具上 中国与外国分别是怎么划分家的边界的.有什么不同.为什么会有差异 如何解释胶粒的带电性? 浙江的,想知道如果选文的话高二物理化学学什么,貌似要会考的...还有数学上什么,想提前预习一下 气旋,反气旋会带来怎样的天气?降雨?降温.或者怎样? 胶粒一定带电吗?有没有可解释的理由?我想问的是为什么胶粒一定带电 高二分科后读文科,物理化学生物还要读吗? 气温和降水的规律和判断. 第三次科技革命成就 不能用符号表示的最好用文字表示.“十米折返跑”的成绩反应了人体的灵敏素质.测定时,在平直跑道上,受试者以站立起跑姿势站在起点终线前,当听到“跑”的口令后,全力跑向正前方十米处 流体力学:二维平板在水面作边界层实验,已知临界雷洛数,动力粘度,为保证全平板为层流,平板长度应不超多少原题目:用一块二维平板在水面上作边界层实验,已知临界雷洛数Re*=5*10^5,水的动 在第三次科技革命 中,中国取得了哪些成就? 急!急!急!流体传热相关问题,流体力学原理公式如图a中在近壁处有驱动力流体会流动,远离壁面处的流体为什么也流动?为什么图c的流态比图b的流态有利于传热传质?请用流体力学原理公式来解 pa和psi 都是压强单位,但psi在地球和月球上值是不一样的,但pa不会变.是不是? 第三次科技革命的产物电子信息方面的, 请详细讲解一下伯努利原理,最好能介绍一下流体力学的基本定律 液力上的par、psi、pa和公斤的转换关系? 第三次科技革命中,中国取得了哪些突出成就 第三小问里面的d/l 是怎么来的这个式子怎么推导的?(要求推导的详解) 有个汉字只是个四点底咋读 一个城市在台风过境前后的风向怎么确定?比如说过境前台风在城市的东南方,过境后在城市的西南方.如果有例题提供的话更好了举例:台风位于上海的东部,此时上海吹偏南风呢,还是答东 请问一下模拟家庭明火炉具传热加热效果要用到流体力学的哪些知识,即用到流体力学什么方程和公式 汉字英文咋么读 台风过境时气压变化?变化幅度是大还是小?48.下列四幅图中,表示台风过境气压变化的是( )A和B选项有疑问,都是气压先降低再升高,为什么选B不选A?是台风过境时气压变化幅度很大吗? 课改后文科生要学几本物化生?我成都的 怎读用汉语翻 某地台风过境前,过境时,过境后的风速、气压、风向、降水情况? 空调运行时高压管温度高还是低压管温度高 "同一点电荷放在电场强度越大的地方,其电势能也越大" 是错误的? 邮箱中的@在汉语中应读什么字 关于塑胶原材料的问题客户图纸显示:1. MATERIAL:A. MAKROLON 2456 POLYCARBONATE• COLOR: LIGHT GREY, RAL 7035, BAYER GLOBAL CODE #700394 麻烦解释下以上意思,材料到底是什么颜色? 能不能和我说高中物理化学一共学了几本啊,是哪几本...浙江省的 迷路的英语用汉语咋读 如何利用拉曼光谱法检测真、假酒? 高中物理 第三题 解释一下 谢谢 求解电场强度 电势 电势差 电势能 等势面的关系,有没有很形象直观的理解方式啊本人今年高二预科,被这几个概念搅和得稀里糊涂,求各位高手们、大神们救我于水火之中,感激不尽啊! 当我国大陆内部为一强大高压所控制,东南部的北太平洋海域为低压时,这一时期的天气状况A 高温多雨 B高温少雨 C 低温多雨 D低温少雨 如图所示,一束粒子(不计重力,初速度可忽略)缓慢通过小孔O1进入极板间电压为U的水平加速电场区域Ⅰ,再通过小孔O2射入相互正交的恒定匀强电场、磁场区域Ⅱ,其中磁场的方向如图所示,磁感 怎么读,用汉语表示出来 低压控制区什么天气低气压控制区,是以什么天气为主?阴雨?晴朗? 选文科?理科?我,男.现在分班,比较喜欢历史地理,理科弱,报文科又考虑到以后就业.报理科,又没信心好纠结!高一上半学期没好好读,现在分班好纠结!报文科的话,那大学录取和就业则么办.报理 分别怎么读 用汉字表示 如何选取拉曼光谱的激发波长 衣,食,住,行中各有什么科技产品,对我们的生活各有什么用? 44个音素怎么读?用汉字表示. 以12m/s行驶的汽车,刹车后做匀减速直线运动,最后1s内的位移是3m那么汽车刹车后3s内位移为多少米? 扇形的周长,面积的公式是什么? 为什么在圆柱绕流中超临界(湍流边界层)扰流分离点较亚临界(层流边界层)靠后,是湍流更易克服逆压梯度吗 关于位移部分的,一辆警车停在路旁,这时有一辆货车以8m/s的速度匀速驶来,路旁的警车发现货车违章,于是在2.5s之后,警车开始以2m/s的加速度追去,问警车多长时间能追上货车? 加急!等量同种电荷连线的中垂线上的电场强度、电势、电势能、电场力及其做功的变化异种电荷时情况又如何?快线上等 这个怎么读中文和写出来 一道高中物理题(位移与时间关系式的应用)原题:一质量为m的滑块在粗糙水平面上滑行,通过频闪照片分析得知,滑块在最初2s内的位移是最后2s内的位移的两倍,且已知滑块第1s内的位移为2.5 生活中用到了哪些科技产品 他对我们的生活的作用 为什么胶粒可带电而胶体呈电中性?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘