2016-07-07 10 views
0

私はArduinoからbluetooth経由で "hello world!"というスパムメールを送信しようとしています。 100ミリ秒毎。 今、アンドロイドには "hello world!"の無限の追加があります。私のStringBuilderと各デバッグ反復には "hello world!\ nhello world!\ nhello world!\ n ..."などあります。 どうすればよいですか? アイデアとして、私はarduinoからAndroidデバイスに多くのJonsonsをスパムします。 arduinoからの各メッセージの後に分割を行うために特別なcharシーケンスを作成する必要がありますか?または、より簡単な決定がありますか?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

関連する問題