title: Android InputStream dropping first two bytes (modified BluetoothChat)
body: <p>I've used code from BluetoothChat example to send and receive byte data from a Bluetooth Scale.
  The scale receives the command from the device, then sends back a byte array.
  {2,198,48,48,48,48,199,3}
  The 2 = STX, and the 198 = packet start, and 199 = packet end, and 3 = ETX in our comms protocol.</p>
  
  <p>All works just fine, except that the following code in the BluetoothChatService.java reacts strangely in that it drops the first two bytes.</p>
  
  <pre><code>/**
       * This thread runs during a connection with a remote device.
       * It handles all incoming and outgoing transmissions.
       */
      private class ConnectedThread extends Thread {
          private final BluetoothSocket mmSocket;
          private final InputStream mmInStream;
          private final OutputStream mmOutStream;
  
          public ConnectedThread(BluetoothSocket socket, String socketType) {
              Log.d(TAG, "create ConnectedThread: " + socketType);
              mmSocket = socket;
              InputStream tmpIn = null;
              OutputStream tmpOut = null;
  
              // Get the BluetoothSocket input and output streams
              try {
                  tmpIn = socket.getInputStream();
                  tmpOut = socket.getOutputStream();
              } catch (IOException e) {
                  Log.e(TAG, "temp sockets not created", e);
              }
  
              mmInStream = tmpIn;
              mmOutStream = tmpOut;
          }
  
          public void run() {
              Log.i(TAG, "BEGIN mConnectedThread");
              final byte[] buffer = new byte[1024];
              int bytes;
  
              // Keep listening to the InputStream while connected
              while (true) {
                  try {
                      // Read from the InputStream
                      bytes = mmInStream.read(buffer);
  
                      // Send the obtained bytes to the UI Activity
                      mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
                              .sendToTarget();
                  } catch (IOException e) {
                      Log.e(TAG, "disconnected", e);
                      connectionLost();
                      // Start the service over to restart listening mode
                      BluetoothChatService.this.start();
                      break;
                  }
              }
          }
  </code></pre>
  
  <p>I have a problem specifically with the following section of code:</p>
  
  <pre><code> bytes = mmInStream.read(buffer);
  
                      // Send the obtained bytes to the UI Activity
                      mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
                              .sendToTarget();
  </code></pre>
  
  <p>When debugging, and looking at the content of buffer in mmInStream.read(buffer) before it is executed, the buffer contains the correct data that was sent back by the scale device ie:</p>
  
  <pre><code>{2,198,48,48,48,48,48,199,3}
  </code></pre>
  
  <p>but once the code has been stepped, the first two bytes of the buffer are stripped off, and it now erroneously contains:</p>
  
  <pre><code>{48,48,48,48,48,199,3}
  </code></pre>
  
  <p>and it is this that the message handler then finally passes on to the activity.</p>
  
  <p>For more clarity, I must add, that the stream of bytes being sent by the scale are Hex characters in the range 00 to FF.
  For some strange reason the string actually looks like this in the debugger:</p>
  
  <pre><code>{2,-58,48,48,48,48,48,-57,3}
  </code></pre>
  
  <p>and then the 2,-58 are dropped.</p>
  
  <p>I noticed that when I send a byte array over a socket, I need to do the following:</p>
  
  <pre><code>byte[] sendBytes = {2,(byte)198,48,48,48,48,48,(byte)199,3}
  </code></pre>
  
  <p>When the content of this array is debugged it will give {2,-58,48,48,48,48,48,-57,3}</p>
  
  <p>Please understand that I am new to Android - java, and have a lot to learn. All help will be appreciated.
  Thanks
  Adrian</p>
  
  <p>I have added log.i entries to better understand what is happening based on Radu's advice. It appears that after I write data to my device over Bluetooth, it responds, and we read for some reason only first two bytes, then send these to the message handler, then read the rest of the packet sent from the device, and then send this off to the message handler, but before the handler has even responded the first time, the buffer has already been overwritten, thus by the time the handler tries to read the first two bytes, it is reading the 3rd and 4th bytes of the response packet, then immediately responds again and reads the entire packet from 3-17th position. 
  So if I can put it simply .. the message handler only responds to the sent buffer after it has been overwritten. See the log below:</p>
  
  <pre><code>09-05 13:16:52.093: V/BluetoothSocket.cpp(11279): writeNative
  09-05 13:16:52.118: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 2 
  09-05 13:16:52.118: I/IN_BUF_AFTER(11279): 2 
  09-05 13:16:52.118: I/IN_BUF_AFTER(11279): -58 
  09-05 13:16:52.118: I/IN_BUF_AFTER(11279): 0 
  09-05 13:16:52.118: I/IN_BUF_AFTER(11279): 0 
  ...truncated to save space ... 
  09-05 13:16:52.163: I/IN_BUF_AFTER(11279): 0 
  09-05 13:16:52.163: I/IN_BUFFER(11279): We now send to handler.
  09-05 13:16:52.168: I/IN_BUFFER(11279): Read Stream into Buffer:
  09-05 13:16:52.168: V/BluetoothSocket.cpp(11279): readNative
  09-05 13:16:52.168: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 17 
  09-05 13:16:52.168: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:52.168: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:52.168: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 44 
  09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:52.178: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:52.178: I/IN_BUF_AFTER(11279): 49 
  09-05 13:16:52.178: I/IN_BUF_AFTER(11279): 50 
  09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 44 
  09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 85 
  09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 13 
  09-05 13:16:52.188: I/IN_BUF_AFTER(11279): -57 
  09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 3 
  09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 6 
  09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 0 
  ...truncated to save space ... 
  09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 0 
  09-05 13:16:52.188: I/IN_BUFFER(11279): We now send to handler.
  09-05 13:16:52.193: I/IN_BUFFER(11279): Read Stream into Buffer:
  09-05 13:16:52.208: V/BluetoothSocket.cpp(11279): readNative
  09-05 13:16:52.208: I/MESSAGE_READ(11279): I am reading 2 bytes
  09-05 13:16:52.208: I/Content(11279): The entire array:
  09-05 13:16:52.208: I/some hardcoded tag(11279): 0 
  09-05 13:16:52.208: I/some hardcoded tag(11279): 0 
  09-05 13:16:52.273: I/MESSAGE_READ(11279): I am reading 17 bytes
  09-05 13:16:52.273: I/Content(11279): The entire array:
  09-05 13:16:52.273: I/some hardcoded tag(11279): 0 
  ...truncated to save space ... 
  09-05 13:16:52.283: I/some hardcoded tag(11279): 0 
  09-05 13:16:52.283: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.528: V/BluetoothSocket.cpp(11279): writeNative
  09-05 13:16:54.553: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 2 
  09-05 13:16:54.553: I/IN_BUF_AFTER(11279): 2 
  09-05 13:16:54.553: I/IN_BUF_AFTER(11279): -58 
  09-05 13:16:54.558: I/IN_BUF_AFTER(11279): 0 
  09-05 13:16:54.558: I/IN_BUF_AFTER(11279): 0 
  ...truncated to save space ... 
  09-05 13:16:54.618: I/IN_BUF_AFTER(11279): 0 
  09-05 13:16:54.618: I/IN_BUF_AFTER(11279): 0 
  09-05 13:16:54.618: I/IN_BUFFER(11279): We now send to handler.
  09-05 13:16:54.618: I/IN_BUFFER(11279): Read Stream into Buffer:
  09-05 13:16:54.618: V/BluetoothSocket.cpp(11279): readNative
  09-05 13:16:54.623: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 17 
  09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 44 
  09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:54.633: I/IN_BUF_AFTER(11279): 49 
  09-05 13:16:54.633: I/IN_BUF_AFTER(11279): 50 
  09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 48 
  09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 44 
  09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 85 
  09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 13 
  09-05 13:16:54.638: I/IN_BUF_AFTER(11279): -57 
  09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 3 
  09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 6 
  09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 0 
  09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 0 
  ...truncated to save space ... 
  09-05 13:16:54.653: I/IN_BUF_AFTER(11279): 0 
  09-05 13:16:54.653: I/IN_BUF_AFTER(11279): 0 
  09-05 13:16:54.653: I/IN_BUFFER(11279): We now send to handler.
  09-05 13:16:54.653: I/IN_BUFFER(11279): Read Stream into Buffer:
  09-05 13:16:54.653: V/BluetoothSocket.cpp(11279): readNative
  09-05 13:16:54.658: I/MESSAGE_READ(11279): I am reading 2 bytes
  09-05 13:16:54.658: I/Content(11279): The entire array:
  09-05 13:16:54.658: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.663: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/MESSAGE_READ(11279): I am reading 17 bytes
  09-05 13:16:54.723: I/Content(11279): The entire array:
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.723: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.728: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.728: I/some hardcoded tag(11279): 0 
  09-05 13:16:54.728: I/some hardcoded tag(11279): 0 
  </code></pre>
  
  <p>My new code also resets the buffer to 0 before reading in the latest stream, thus the message handler only seeing 0, before I did this the log appeared as follows:</p>
  
  <pre><code>09-05 13:06:20.508: V/BluetoothSocket.cpp(10176): writeNative
  09-05 13:06:20.533: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 2 
  09-05 13:06:20.533: I/IN_BUF_AFTER(10176): 2 
  09-05 13:06:20.533: I/IN_BUF_AFTER(10176): -58 
  09-05 13:06:20.533: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.533: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.538: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.538: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.548: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.548: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.548: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.553: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.553: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.578: I/IN_BUFFER(10176): We now send to handler.
  09-05 13:06:20.578: I/IN_BUFFER(10176): Read Stream into Buffer:
  09-05 13:06:20.578: V/BluetoothSocket.cpp(10176): readNative
  09-05 13:06:20.578: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 17 
  09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:20.583: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:20.583: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:20.583: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 44 
  09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 49 
  09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 51 
  09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 44 
  09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 85 
  09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 13 
  09-05 13:06:20.598: I/IN_BUF_AFTER(10176): -57 
  09-05 13:06:20.598: I/IN_BUF_AFTER(10176): 3 
  09-05 13:06:20.613: I/IN_BUF_AFTER(10176): 6 
  09-05 13:06:20.613: I/IN_BUF_AFTER(10176): 0 
  ...truncated to save space ... 
  09-05 13:06:20.623: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:20.623: I/IN_BUFFER(10176): We now send to handler.
  09-05 13:06:20.623: I/IN_BUFFER(10176): Read Stream into Buffer:
  09-05 13:06:20.623: V/BluetoothSocket.cpp(10176): readNative
  09-05 13:06:20.628: I/MESSAGE_READ(10176): I am reading 2 bytes
  09-05 13:06:20.628: I/Content(10176): The entire array:
  09-05 13:06:20.628: I/some hardcoded tag(10176): 48 
  09-05 13:06:20.628: I/some hardcoded tag(10176): 48 
  09-05 13:06:20.688: I/MESSAGE_READ(10176): I am reading 17 bytes
  09-05 13:06:20.688: I/Content(10176): The entire array:
  09-05 13:06:20.688: I/some hardcoded tag(10176): 48 
  09-05 13:06:20.688: I/some hardcoded tag(10176): 48 
  09-05 13:06:20.688: I/some hardcoded tag(10176): 48 
  09-05 13:06:20.688: I/some hardcoded tag(10176): 48 
  09-05 13:06:20.688: I/some hardcoded tag(10176): 48 
  09-05 13:06:20.688: I/some hardcoded tag(10176): 44 
  09-05 13:06:20.688: I/some hardcoded tag(10176): 48 
  09-05 13:06:20.693: I/some hardcoded tag(10176): 48 
  09-05 13:06:20.693: I/some hardcoded tag(10176): 49 
  09-05 13:06:20.693: I/some hardcoded tag(10176): 51 
  09-05 13:06:20.693: I/some hardcoded tag(10176): 48 
  09-05 13:06:20.693: I/some hardcoded tag(10176): 44 
  09-05 13:06:20.693: I/some hardcoded tag(10176): 85 
  09-05 13:06:20.693: I/some hardcoded tag(10176): 13 
  09-05 13:06:20.693: I/some hardcoded tag(10176): -57 
  09-05 13:06:20.693: I/some hardcoded tag(10176): 3 
  09-05 13:06:20.693: I/some hardcoded tag(10176): 6 
  09-05 13:06:21.788: V/BluetoothSocket.cpp(10176): writeNative
  09-05 13:06:21.803: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 2 
  09-05 13:06:21.803: I/IN_BUF_AFTER(10176): 2 
  09-05 13:06:21.803: I/IN_BUF_AFTER(10176): -58 
  09-05 13:06:21.803: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.803: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.808: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.808: I/IN_BUF_AFTER(10176): 44 
  09-05 13:06:21.818: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.818: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.818: I/IN_BUF_AFTER(10176): 49 
  09-05 13:06:21.823: I/IN_BUF_AFTER(10176): 51 
  09-05 13:06:21.823: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.828: I/IN_BUF_AFTER(10176): 44 
  09-05 13:06:21.828: I/IN_BUF_AFTER(10176): 85 
  09-05 13:06:21.833: I/IN_BUF_AFTER(10176): 13 
  09-05 13:06:21.848: I/IN_BUF_AFTER(10176): -57 
  09-05 13:06:21.848: I/IN_BUF_AFTER(10176): 3 
  09-05 13:06:21.848: I/IN_BUF_AFTER(10176): 6 
  09-05 13:06:21.853: I/IN_BUF_AFTER(10176): 0 
  ...truncated to save space ... 
  09-05 13:06:21.853: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:21.853: I/IN_BUFFER(10176): We now send to handler.
  09-05 13:06:21.858: I/IN_BUFFER(10176): Read Stream into Buffer:
  09-05 13:06:21.858: V/BluetoothSocket.cpp(10176): readNative
  09-05 13:06:21.858: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 17 
  09-05 13:06:21.858: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 44 
  09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 49 
  09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 51 
  09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 48 
  09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 44 
  09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 85 
  09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 13 
  09-05 13:06:21.868: I/IN_BUF_AFTER(10176): -57 
  09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 3 
  09-05 13:06:21.873: I/IN_BUF_AFTER(10176): 6 
  09-05 13:06:21.873: I/IN_BUF_AFTER(10176): 0 
  ...truncated to save space ...
  09-05 13:06:21.893: I/IN_BUF_AFTER(10176): 0 
  09-05 13:06:21.893: I/IN_BUFFER(10176): We now send to handler.
  09-05 13:06:21.893: I/IN_BUFFER(10176): Read Stream into Buffer:
  09-05 13:06:21.898: V/BluetoothSocket.cpp(10176): readNative
  09-05 13:06:21.903: I/MESSAGE_READ(10176): I am reading 2 bytes
  09-05 13:06:21.903: I/Content(10176): The entire array:
  09-05 13:06:21.903: I/some hardcoded tag(10176): 48 
  09-05 13:06:21.903: I/some hardcoded tag(10176): 48 
  09-05 13:06:21.958: I/MESSAGE_READ(10176): I am reading 17 bytes
  09-05 13:06:21.958: I/Content(10176): The entire array:
  09-05 13:06:21.958: I/some hardcoded tag(10176): 48 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 48 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 48 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 48 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 48 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 44 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 48 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 48 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 49 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 51 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 48 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 44 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 85 
  09-05 13:06:21.958: I/some hardcoded tag(10176): 13 
  09-05 13:06:21.958: I/some hardcoded tag(10176): -57 
  09-05 13:06:21.963: I/some hardcoded tag(10176): 3 
  09-05 13:06:21.963: I/some hardcoded tag(10176): 6 
  </code></pre>
  
  <p>I hope that hasn't confused the matter, but actually demonstrates the problem so many people appear to be having with the BluetoothChat demonstration code, when addapted for their own use.
  Somehow we need to keep the buffer from being overwritten until the message handler has read it??
  Regards</p>
  
  <p>Adrian Wreyford</p>
  
  <p>Updated code working better because of Sleep!</p>
  
  <pre><code>public void run() {
              Log.i(TAG, "BEGIN  IN mConnectedThread");
              byte[] buffer = new byte[1024];
              int bytes;
  
              // Keep listening to the InputStream while connected
              while (true) {
                  try {
                        try {
                          sleep(100);
                      } catch (InterruptedException e) {
                          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }
                      bytes = mmInStream.available();
                      Log.i("IN_BUFFER", "mmInStream-available bytes: " + Integer.toString(bytes)+ " ");
                      if (bytes&gt;0){ 
                      for(int i=0; i&lt;30; i++){ 
                         buffer[i] = 0;}
                      // Read from the InputStream
                      Log.i("IN_BUFFER", "Read Stream into Buffer:");
                      bytes = mmInStream.read(buffer);
  
                      Log.i("IN_BUFFER", "The entire buffer after read stream into buffer: " + Integer.toString(bytes)+ " "); 
                      for(int i=0; i&lt;30; i++) 
                           Log.i("IN_BUF_AFTER", buffer[i] + " ");
                      // Send the obtained bytes to the UI Activity
                      Log.i("IN_BUFFER", "We now send to handler.");
                      mHandler.obtainMessage(BluetoothScale.MESSAGE_READ, bytes, -1, buffer)
                              .sendToTarget();}
                  } catch (IOException e) {
                      Log.e(TAG, "disconnected", e);
                      connectionLost();
                      // Start the service over to restart listening mode
                      BluetoothScaleService.this.start();
                      break;
                  }
              }
          }
  </code></pre>
  
  <p>Now the logs look as follows:</p>
  
  <pre><code>09-05 20:57:15.833: V/BluetoothSocket.cpp(25368): availableNative
  09-05 20:57:15.838: I/IN_BUFFER(25368): mmInStream-available bytes: 0 
  09-05 20:57:15.888: V/BluetoothSocket.cpp(25368): availableNative
  09-05 20:57:15.888: I/IN_BUFFER(25368): mmInStream-available bytes: 0 
  09-05 20:57:15.943: V/BluetoothSocket.cpp(25368): availableNative
  09-05 20:57:15.943: I/IN_BUFFER(25368): mmInStream-available bytes: 0 
  09-05 20:57:15.958: V/BluetoothSocket.cpp(25368): writeNative
  09-05 20:57:15.988: V/BluetoothSocket.cpp(25368): availableNative
  09-05 20:57:15.993: I/IN_BUFFER(25368): mmInStream-available bytes: 2 
  09-05 20:57:15.993: I/IN_BUFFER(25368): Read Stream into Buffer:
  09-05 20:57:15.993: V/BluetoothSocket.cpp(25368): readNative
  09-05 20:57:15.998: I/IN_BUFFER(25368): The entire buffer after read stream into buffer: 19 
  09-05 20:57:15.998: I/IN_BUF_AFTER(25368): 2 
  09-05 20:57:15.998: I/IN_BUF_AFTER(25368): -58 
  09-05 20:57:16.003: I/IN_BUF_AFTER(25368): 48 
  ...truncated to save space ... 
  09-05 20:57:16.033: I/IN_BUF_AFTER(25368): 85 
  09-05 20:57:16.033: I/IN_BUF_AFTER(25368): 13 
  09-05 20:57:16.033: I/IN_BUF_AFTER(25368): -57 
  09-05 20:57:16.033: I/IN_BUF_AFTER(25368): 3 
  09-05 20:57:16.038: I/IN_BUF_AFTER(25368): 6 
  09-05 20:57:16.038: I/IN_BUF_AFTER(25368): 0 
  ...truncated to save space ... 
  09-05 20:57:16.043: I/IN_BUF_AFTER(25368): 0 
  09-05 20:57:16.043: I/IN_BUFFER(25368): We now send to handler.
  09-05 20:57:16.058: I/MESSAGE_READ(25368): I am reading 19 bytes
  09-05 20:57:16.058: I/Content(25368): The entire array:
  09-05 20:57:16.058: I/some hardcoded tag(25368): 2 
  09-05 20:57:16.058: I/some hardcoded tag(25368): -58 
  09-05 20:57:16.058: I/some hardcoded tag(25368): 48 
  ...truncated to save space ...
  09-05 20:57:16.063: I/some hardcoded tag(25368): 13 
  09-05 20:57:16.063: I/some hardcoded tag(25368): -57 
  09-05 20:57:16.063: I/some hardcoded tag(25368): 3 
  09-05 20:57:16.063: I/some hardcoded tag(25368): 6 
  09-05 20:57:16.093: V/BluetoothSocket.cpp(25368): availableNative
  09-05 20:57:16.093: I/IN_BUFFER(25368): mmInStream-available bytes: 0
  </code></pre>
  
  <p>Notice that the mmInStream.available() returns 2 bytes, then on the next line of code when we read the buffer, 19 bytes are read .. really strange, how it fills up between these two supposedly immediate steps. The sleep appears to allow enough time for the handler to read the message from passed buffer, before the buffer is rewritten to.</p>
  
  <p>I would have expected the handler.obtainmessage... to send a unique buffer, but appears to send the reference to the thread buffer, thus the hassle. 
  How can I send a unique buffer each time?
  Thx
  Adrian</p>