2016-07-07 2 views
0

"hello world!"스팸으로 블루투스를 통해 Arduino에서 테스트 메시지를 보내려고합니다. 매 100ms마다. 이제 안드로이드에 "hello world!"가 끝없이 추가되었습니다! 내 StringBuilder 및 각 디버그 반복 "hello world! \ nhello world! \ nhello world! \ n ..."등 어떻게해야합니까? 아이디어로 나는 arduino에서 Android 장치에 많은 Jsons를 스팸합니다. 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

"잠시 휴식"이란 무엇을 의미합니까? "분할기"? 지금은 여러 줄의 텍스트가 포함 된'StringBuilder' (https://docs.oracle.com/javase/8/docs/api/java/io/StringWriter.html이 아닌)가 있습니다. , 왜 그것을 바꿀까요? 또한 'line'의 범위를 루프 안에 유지해야합니다. 밖에는 너무 넓습니다. 나는 간결성을 위해 클로즈드 또는 예외 처리가 없다고 생각한다. '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