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); }