我使用串口线从一台电脑向另一台电脑的接收程序里发送一个16进制字节数组,比较长,有几十个字节,然后程序接收时就发生将该数组分成几个部分接收的问题,我想是不是CPU给线程分配时间段造成的问题呢,请问该如何解决。急盼答。谢谢!
接收代码:
while(bufferedIn.available() > 1) {
      bufferedIn.read(buffer, offset, 53);  //该数组有53个字节,我用一个字节数组buffer(我将其字节全部初
                                            //始化为0x00)来接收bufferedInputStream的字节。
}
应接收到的数组为:01 03 30 48 92 E4 43 00 00 7A 44 A6 0E EA 3E 00 00 00 00 A6 0E EA 3E 61 8F 0D 3F 00 00 00 00 50 07 35 41 00 00 00 00 00 00 00 00 F1 2C 00 00 F1 2C 00 00 7A 88 
但实际上被分成几个数组了
例如:
<01 03 30 48 92 E4 43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 
<00 7A 44 A6 0E EA 3E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 
<00 00 00 A6 0E EA 3E 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 
<8F 0D 3F 00 00 00 00 50 07 35 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >
<00 00 00 F1 2C 00 00 F1 2C 00 00 7A 88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >
每次buffer数组只接收到其中的一部分,然后判断while(bufferedIn.available() > 1)不成立,此时bufferedIn.available()为0,然后就执行后面的程序了。请问我应该怎么才能将bufferedInputStream中的字节数组读取玩,在进行处理。

解决方案 »

  1.   

    int offset=0;
    int len=0;
    while((len=bufferedIn.available())> 0) { 
          bufferedIn.read(buffer,offset,len);
        offset+=len;
    }  
      

  2.   

    我的意思是要让buffer把这几十个字节全读完了在进行后面的处理
      

  3.   

    没怎么看明白,你不能搞个计数的变量吗,初始为0,用in.read()每次读一个字节,读一个变量就加1,变量等于53的时候就进行后面的处理
      

  4.   

    我是这样分析的:我采用多线程,cpu分配给此线程的时间片不够接收一个完整的数组,造成buffered.read()时,此时的bufferInputStream中只有几个字节,然后cpu再次分配给此线程时间片,继续读取后面的字节,造成一个比较长的字节数组被当成了几个数组被接收,我想怎么控制线程,让他读取完所有数组字节,然后才进行后面的处理
      

  5.   

    我自己解决了,在读取之前用一个线程睡眠一小段时间,就足够数组全部存到bufferedInputStream中了