2016-07-07 2 views
0

Я пытаюсь отправить тестовые сообщения от Arduino через bluetooth, отправив спам «привет мир!». каждые 100 мс. Теперь, на андроиде у меня есть бесконечное дополнение «привет мир!». к моему StringBuilder и каждой итерации отладки у меня есть «привет мир! \ nhello world! \ nhello world! \ n ...» и т. д. Что мне делать? Как идея, я буду спамить много Jsons от arduino до устройства Android. Должен ли я сделать некоторые специальные последовательности символов для разделителей, чтобы разбить их после каждого сообщения от arduino? Или есть более простое решение?BufferedReader бесконечно добавляет readLine()

public static String toString(InputStream inputStream) throws IOException { 

      byte[] bs = new byte[inputStream.available()]; 
      if (Utils.isZero(bs.length)) { 
       return ""; 
      } 
      BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); 
      StringBuilder total = new StringBuilder(); 
      String line; 
      while (r.ready()) { 
       line = r.readLine(); 
       total.append(line).append('\n'); 
      } 

      return total.toString(); 
     } 
+0

Что вы подразумеваете под словом "break the while"? «разделители»? Прямо сейчас у вас есть 'StringBuilder' (а не https://docs.oracle.com/javase/8/docs/api/java/io/StringWriter.html?), Содержащий несколько строк текста, что кажется неплохим , так зачем его менять? Кроме того, вы должны держать область «линии» внутри цикла; снаружи слишком широк. Я предполагаю, что недостаток обработки закрытых или исключений для краткости. Использование «available()» не является необходимым и немного рискованным. Смешивание байтов и символов рискованно. Что у вас сейчас, что вам не нравится? –

+0

StringBuilderObj.setLength (0), чтобы очистить, если это то, что вы пытаетесь сделать .. Ваша проблема очень неопределенная – DarkV1

+0

Я сказал, что я спам сообщения от arduino, и это бесконечный InputStream. Бесконечный. он всегда добавляет и добавляет и добавляет к нему. Это никогда не закончится – user2976267

ответ

0

Вы не проверяете конец потока.

Правильный способ написать, что цикл чтения является:

while ((line = br.readLine()) != null) 
{ 
    total.append(line).append('\n'); 
} 

Но если данные бесконечен это не имеет смысла даже есть цикл. Просто верните br.readLine(). Это даже не имеет смысла иметь этот метод.

NB Вам не нужно выделять массив байтов, чтобы определить его длину.

+0

нет конца до конца потока. он постоянно добавляется на другом конце. это проблема. он никогда не покидает петлю. – user2976267

+0

Итак, вы должны обрабатывать данные внутри цикла вместо потом или вообще не иметь петли в этом методе и вызывать его во внешнем цикле. – EJP