Java之蓝牙传送数据byte与String转换

    最近开发人脸识别项目,因为谷歌眼镜太不给力了,调用摄像头不到半小时就会发热卡顿,所以捕捉人脸并识别的功能就不能依赖谷歌眼镜了,只能将其捕获的人脸图片通过蓝牙传给手机,在手机上进行识别后,再将信息传给谷歌眼镜。

    在通过手机将信息(图片、识别得分、名字)分段发送给谷歌眼镜之前,我把这些信息(Bitmap、String)转化成了byte[],在谷歌眼镜收到byte[]数组之后,为了方便转化,我在发送信息之前,将分数之前加入了与图片的区分标记(bOK),在分数之后加入了与名字的区分标记(sOK)。在谷歌眼镜收到byte[]数组之后,需将其转化成String,通过标记分别获得图片、名字、分数的字符串数据,再将字符串转化为byte[],获取各自byte[]长度。

    发送过程为分段发送,所以在谷歌眼镜端用了一个Queue queue存放数据。名字、分数的数据字节数很少,而图片的字节数很大,所以传到最后一段,肯定是包含图片的少部分数据、名字与分数。

    手机端向眼镜端发送数据:

    Java之蓝牙传送数据byte与String转换

    Java之蓝牙传送数据byte与String转换

    Java之蓝牙传送数据byte与String转换

    Java之蓝牙传送数据byte与String转换

   谷歌眼镜端接收数据:

  1.  bitmaplength:图片 字节数据长度
  2.  scorelength:图片+"bOK"+分数 字节数据长度
  3. 收到的最后一段数据包括图片、分数、名字的信息,需要获得bitmaplength与scorelength,此时需要将byte[]数组转化成String,通过标记获得图片字符串、分数字符串,再将字符串转化成byte[]获得数据长度,通过String s = new String(buf_data);byte[] overbyte = s.getBytes()获得的overbyte.length比之前的buf_data.length大,此时用ISO-8859-1编码不会有上述现象。

    Java之蓝牙传送数据byte与String转换

 

猜你喜欢

转载自blog.csdn.net/weixin_39766005/article/details/82056854