zoukankan      html  css  js  c++  java
  • 蓝牙通信中读取固定长度数组的解决

    2014-05-05 18:10 今天主要忙于工作。之前遇到一个问题,今天得以解决。

    问题的描叙:需要从输入流中读取固定长度的字节数组。

    问题的解决:今天参考了网上的资料。解决了。

    注释部分:之前是通过拷贝数组进行解决,但是难以解决。

    解决的代码如下:

    public synchronized void run() {
                byte[] buffer = new byte[16];
                int bytes = 0;
                
                
                while (mmInStream != null) {
                    try {
                        
                        
                         
                        // 通过连接的端口获得输入数据流
                        while(bytes <16){
                            
                        
                        bytes += mmInStream.read(buffer,bytes,16-bytes);
                        
                        }
                        
                        
                        
                        mHandler.obtainMessage(MainActivity.MESSAGE_READ, 16, -1,
                                buffer).sendToTarget();
                        
                        bytes =0;
                        
                        
                        
                        
                    } catch (IOException e) {
                        connectionLost();
                        BluetoothChatService.this.start();
                        break;
                    }
                    
                    //System.arraycopy(buffer, 0, buffer_new, old, bytes);
                    
                    //old = bytes;
                    
                    //allBytes += bytes;
                    
                    
                    //System.out.println("------>读取到的数量为:"+bytes);
                    //System.out.println("----->读取的总字符为:"+allBytes);
                    
                    //System.out.println("---->当前拷贝后的数组第一个元素为:"+buffer_new[0]);
                    
                    //讲读取的元素,拷贝到新的数组。命令是以16为结尾的。
                    //因此必须读取的数组,最后一个命令为 16 才停止拷贝
                    //不能读一次,发送一次。经测试,一次操作,会发送3次消息
                    /*
                    if(buffer_new[allBytes-1] ==22 ){
                        System.out.println("满足发送消息的条件");
                        System.out.println("当前发现ox16 = "+buffer_new[allBytes-1]);
                        
                        
                        //命令结束后发送
                        mHandler.obtainMessage(MainActivity.MESSAGE_READ, allBytes, -1,
                                buffer_new).sendToTarget();
                        
                        Arrays.fill(buffer_new, (byte) 0); //重置数组
                        allBytes = 0;
                        old = 0;
                        bytes = 0;
                        
                        System.out.println("---->发送Ok 了");
                        
                        
                        
                    }*/
                        
                        
                                    
                    
                    
                    
                    
                }
                
                
                
                
                
                
            }
    读取固定长度数组

    核心的代码是:

    while(bytes <16){
                            
                        
                        bytes += mmInStream.read(buffer,bytes,16-bytes);
                        
                        }
    核心部分
    QQ:540045865 热爱生活,热爱编程。
  • 相关阅读:
    Tomcat 中会话超时的相关配置
    Oracle10g任务调度创建步骤
    Oracle的三种高可用集群方案
    软/硬件负载均衡产品 你知多少?
    Nginx、LVS及HAProxy负载均衡软件的优缺点详解
    java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误
    TortoiseSVN客户端重新设置用户名和密码
    Linux下oracle数据库启动和关闭操作
    Linux下使用ps命令来查看Oracle相关的进程
    【Kill】两条Linux命令彻底杀死Oracle
  • 原文地址:https://www.cnblogs.com/jsRunner/p/3709800.html
Copyright © 2011-2022 走看看