2013-08-24 131 views
0

我已经设置了一个套接字接收来自蓝牙设备的数据。接收缓冲区被设置为在退出线程之前收集8个字节的数据,但缓冲区不会前进以存储下一个字节的数据。我将缓冲区设置为8并循环,直到缓冲区满。蓝牙接收数据

 private class ConnectedThread extends Thread { 

    private final InputStream mmInStream; 
    private final OutputStream mmOutStream; 

    public ConnectedThread(BluetoothSocket socket) { 
     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 

     // Get the input and output streams, using temp objects because 
     // member streams are final 
     try { 
      tmpIn = btSocket.getInputStream(); 
      tmpOut = btSocket.getOutputStream(); 
     } catch (IOException e) { } 

     mmInStream = tmpIn; 
     mmOutStream = tmpOut; 
     } 

    public void run() { 

     // Keep listening to the InputStream until an exception occurs 
     while (true) { 
      try { 

       InputStream mmInStream = btSocket.getInputStream(); 

       byte[] readBuffer = new byte[8]; 
       int read = mmInStream.read(readBuffer); 
       while(read != -1){ 

        Log.d(TAG, " SizeRR " + read); 
        read = mmInStream.read(readBuffer); 
       } 


      } catch (IOException e) { 
       break; 
      } 
     } 
    } 

Log.d(SizeRR 1)读出的8倍

+0

你期待什么输出? – frogmanx

+0

我试图通过readBuffer [7]将数据读入数组readBuffer [0]。 –

回答

0

InputStream.read()被设计为返回一个抽象INT,所以它将总是从0-255打印数。

尝试代替所读取的(字节[]缓冲液)的方法,将其写入数据的buffer.length量从流,并将数据复制直到阵列:

public void run() { 

    // Keep listening to the InputStream until an exception occurs 
    while (true) { 
     try { 

      InputStream mmInStream = btSocket.getInputStream(); 
      byte[] readBuffer = new byte[8]; 
      mmInStream.read(readBuffer); 

     } catch (IOException e) { 
      break; 
     } 
    } 
} 
+0

接收函数正常,但它只返回1个字节。接收缓冲区应该有8个字节可用。 –

+0

但是你的原始函数中有8个字节。如果Log.d(SizeRR 1)返回8次,那么8个整数等于8个字节。 – frogmanx

+0

你是对的我得到8个字节。我认为mmInStream.read(readBuffer)会一次将全部8个读入readbuffer,然后退出。我想我会尝试一个循环来分别读取每个8字节。 –

相关问题