0

シリアルポート経由でデバイスと通信します。

InputStream を取得し、デバイスが送信するものを読み取ることができました。

しかし、問題は、いつ読むのをやめて別のタスクに進むべきかわからないことです。

簡略化されたコードは次のとおりです。

inputStream = serialPort.getInputStream();
try
{
    int step = 0;
    while ( (len = inputStream.read(buffer)) > -1 )
    {
        //do something
    }    
    System.out.println("END");
}
catch ( IOException e )
{
    throw new Exception("IO Error");
}

「END」にたどり着いたことは一度もありません。デバイスが何も送信しない場合でも、ループを続けます。デバイスが送信を停止したときにループを停止するにはどうすればよいですか。

4

2 に答える 2

1
 inputStream = serialPort.getInputStream();
 int available = inputStream .available();

 if (available > 0) {
        byte data[] = new byte[available];
        inputStream .read(data);

   }else{
    logger.info("data is not avilable");
    }
于 2012-12-12T09:26:59.953 に答える
1

JavaでInputStreamの終わりを識別する方法から

それ以上のデータがないとは何も言われていないため、より多くのデータを探しています。ネットワークのもう一方の端は、いつでもより多くのデータを送信できます。

クライアント/サーバー プロトコルを設計しているのか、単に実装しようとしているだけなのかは明らかではありませんが、通常、メッセージの終わりを検出する一般的な方法が 3 つあります。

  • メッセージの最後で接続を閉じる
  • データ自体の前にメッセージの長さを置く
  • セパレーターの使用; 通常のデータでは絶対に発生しない値 (または常に何らかの形でエスケープされる値)
于 2012-12-12T09:35:38.967 に答える