求助关于安卓串口读取数据时,不能完整读取长度

zongshengruhai 2018-07-19 04:53:40
如题,现在再用安卓的平板做上位机,主要工作就是和下位机通讯。
但现在遇到一个问题,就是串口每次接收数据时,每次串口接收线程中断时,第一次read都最大只能读32个byte,之后就可以正常的由线程的等待一开始的sleep时长控制,求助怎么解决?
引用
//------------- 读线程 ----------------//
private class ReadThread extends Thread{
@Override
public void run(){
super.run();
while (!isInterrupted()){
try {

Thread.sleep(300);//感觉每次中断时,第一次都没有执行这个sleep

if (input != null) {
int size = input.read(buffer);
if (size > 0) {
Log.e(TAG, "读取成功,长度为 :" + size);
for (int i = 0; i < size; i++) {
outBuffer += buffer[i] + " ";
}
}else{
Log.e(TAG, "读取失败");
}
} else {
break;
}
}catch (IOException e){
break;
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}


理论来讲,本身一次中断,就可以将所以数据读完,而目前却执行了2次
...全文
844 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
欧阳帆54 2018-07-30
  • 打赏
  • 举报
回复
引用 5 楼 qq_39193795 的回复:
[quote=引用 4 楼 qq_39193795 的回复:]
[quote=引用 3 楼 ouyangfan54 的回复:]
应该是你的buffer设置的是32个字节,所以读取的就是32个字节

谢谢解答,但是我的buffer是个数值,申明长度是512[/quote]
数组...打错[/quote]

你可以看一下这句代码,int size = input.read(buffer);,看看size的值是多少,size就是这次读取的值。如果还是32,那就是另外一种情况了,Java API的解释是这样的:运行一次读取一定的数量的字节数.java会尽可能的读取buffer长度个字节,但也有可能读取少于b的字节数.至少读取一个字节,最多读取buffer长度个字节
zongshengruhai 2018-07-23
  • 打赏
  • 举报
回复
引用 4 楼 qq_39193795 的回复:
[quote=引用 3 楼 ouyangfan54 的回复:]
应该是你的buffer设置的是32个字节,所以读取的就是32个字节

谢谢解答,但是我的buffer是个数值,申明长度是512[/quote]
数组...打错
zongshengruhai 2018-07-23
  • 打赏
  • 举报
回复
引用 3 楼 ouyangfan54 的回复:
应该是你的buffer设置的是32个字节,所以读取的就是32个字节

谢谢解答,但是我的buffer是个数值,申明长度是512
zongshengruhai 2018-07-20
  • 打赏
  • 举报
回复
引用 1 楼 afei__ 的回复:
串口读数组本身就很可能需要读几次才能读完,建议是写一个拼接数据的方法,每次记录读取的数据和数据的长度

你好,谢谢解答,串口读数值读几次才能读完可以理解,但现在的情况是首次只能读32个 是定长了,我觉得应该是在什么地方有门限
欧阳帆54 2018-07-20
  • 打赏
  • 举报
回复
应该是你的buffer设置的是32个字节,所以读取的就是32个字节
阿飞__ 2018-07-19
  • 打赏
  • 举报
回复
串口读数组本身就很可能需要读几次才能读完,建议是写一个拼接数据的方法,每次记录读取的数据和数据的长度

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧