蓝牙通信中读取固定长度数组的解决

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

}

核心部分

蓝牙通信中读取固定长度数组的解决,布布扣,bubuko.com

时间: 2024-12-20 04:50:18

蓝牙通信中读取固定长度数组的解决的相关文章

关于固定长度数组中以元素为单位进行的移位操作

例如,数组: int array[5] = {1,2,3,4,5};整体往后循环移1个单元的元素. 最开始代码如下. /** ** @author:hushunfeng ** */ #include<stdio.h> void main() { int array[5] = {1,2,3,4,5}; int i; for(i = 0; i < 5 ; i++) { array[i+1] = array[i]; } for(i=0;i<5;i++) { printf("%d

span标签中显示固定长度,超出部分用省略号代替,光标放到文字上显示全部

在span中实现显示某段内容,固定其长度,多余部分用省略号代替,这样就用到html的title属性: 如:<span title="value"></span> title属性:其值是text,属性描述是规定元素的工具提示文本,意思就是鼠标移到元素上时显示title中的内容: 以span为例实现上述功能: html: <div> <span class="basic-l left10">筛选标签:</span&g

认真体会 结构体中的零长度数组

以前只是知道这个东西,可以解决一些问题,最近自己做一个字符串操作的东东,看了下redis的源码,做个小的总结. struct cl_str_s{ int free; int len; char buf[]; }; 代码的意思是,我们定义了一个结构体,它有这么三个属性,作用很明显不详细说了. 思考两个问题: 1:char buf[]能不能用char *buf代替? 2:如果我把 buf[] 做一个 char *的转换(方便通用printf方法或者其它),那么给定一个转换后变量的地址,我该怎么获取结

GNU C中的零长度数组

http://blog.csdn.net/ssdsafsdsd/article/details/8234736 在标准C和C++中,长度为0的数组是被禁止使用的.不过在GNU C中,存在一个非常奇怪的用法,那就是长度为0的数组,比如Array[0];很多人可能觉得不可思议,长度为0的数组是没有什么意义的,不过在这儿,它表示的完全是另外的一层意思,这个特性是不可移植的,所以,如果你致力于编写可移植,或者是稍稍需要跨平台的代码,这些Trick最好还是收起来的好. 在GNU的指南中,它是如此写道: s

C++&amp;OpenCV中读取图像到数组的两种

///method 1 read the image data one by one for (int row = 0, i = 0;row < imgDst.rows;row++) { for (int col = 0;col < imgDst.cols;col++) { cout << setw(3) << (int)imgDst.at<uchar>(row, col) << " "; arr[i] =imgDst.at&

java基础-输入流-读取文本文件中数据至字符串数组

简介:如题 import java.io.FileInputStream; /** * @author czchina * */ public class TestStream { public static void main(String[] args) { // TODO Auto-generated method stub //声明输入流的引用 FileInputStream fls = null; //声明输出流的引用 FileOutputStream fos =null; try{

VBA读取固定文件夹中txt内容

Sub OneTxt() '打开一个txt文件 Dim Filename As Variant, extLine&, mArr() As String Dim i%, j%, txtpath As String Dim txtname As Variant ChDir ThisWorkbook.Path txtpath = "D:\Users\addy.zhao\Desktop\computers\" 'Filename = Application.GetOpenFilenam

结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法

结构体中最后一个成员为[0]长度数组的用法:这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势:(1).不需要初始化,数组名直接就是所在的偏移:(2).不占任何空间,指针需要占用int长度空间,空数组不占任何空间.“这个数组不占用任何内存”,意味着这样的结构节省空间:“该数组的内存地址就和它后面的元素地址相同”,意味着无需初始化,数组名就是后面元素的地址,直接就能当指针使用. 这样的写法最适合制作动态buffer,因为可以这样分配空间malloc(sizeof(struc

Java从内存流中读取byte数组

Java中通过servlet接收二进制数据,然后将二进制数据流读取为byte数组.开始使用:byte[] bs = new byte[request.getContentLength()];request.getInputStream().read(bs);return bs;数据量小的时候没有问题,数据量大了就读取不完整了,后来按如下修改即可. /** * 获取客户提交上来的数据 * @param request * @return */ private byte[] getData(Http