2015-03-19 3 views
0

проект встроенной системы, в котором я получу некоторый отклик от моего микроконтроллера на устройство Android с помощью модуля Bluetooth, и я не могу получить байты из этой строки bytes = "mmInStream.read(buffer)" .. , когда я конвертирую byte [] в String с использованием этого String data=new String(bytes) Я не получаю данные, которые я отправил с моего микроконтроллера должным образом. Иногда charactors отсутствуют ..Java inputstream read() не получает данные массива полного байта

 public void run() { 
     Log.i(TAG, "BEGIN mConnectedThread"); 
     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); 

       String data=new String(bytes);   
       System.out.println(data);   

       // Send the obtained bytes to the UI Activity 

      } catch (IOException e) { 
       Log.e(TAG, "disconnected", e); 
       connectionLost(); 
       break; 
      } 
     } 
    } 

Пожалуйста, помогите мне

+0

использовать новую строку (буфер, 0, байты) вместо новой строки (байты), и данные должны отображаться правильно – Paul

ответ

0

Попробуйте использовать BufferedReader вместо этого.

Она считывает текст из символов входного потока, буферные символы так , чтобы обеспечить эффективное чтение символов, массивов и линий.

Если вы используете Java 7 или более старый следующий код поможет:

try (BufferedReader reader = new BufferedReader(new InputStreamReader(mmInStream))){ 
     String line = null; 
     while((line = reader.readLine()) != null) { 
     System.out.println(line); 
     } 
     connectionLost(); 
    } catch(IOException e) { 
     e.printStackTrace(); 
    } 

Если вы используете Java 6 или моложе, используйте этот код:

BufferedReader reader = null; 
    try { 
     reader = new BufferedReader(new InputStreamReader(mmInStream)); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
     System.out.println(line); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (reader != null) { 
     try { 
      reader.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     } 
     connectionLost(); 
    } 

Но такой подход имеет свои недостатки , Вы можете прочитать о них, например. here