1

先ほどこの質問をしようとしましたが、質問がわかりにくかったです。文字に対するJava BufferedReaderアクション?

これが私の問題です..デバイスから読み取るように設定された BufferedReader があります。よく読んでいます。に設定しています

if (Status.reader.ready()) {
    Lines = Status.reader.readLine();
}
if (Lines.contains(">")) {
    log.level1("ready to send data")
}

>デバイスにさらにデータを送信するまで、バッファリングされたリーダーは報告しません。問題は、リーダーが含まれ>ている場合、レポートの準備ができていないことです。>さらにデータを入力するまで保持されます。

以下を試しましたが、何も返されません。log.level0() さえ返さない

Lines = ""

try {
    Lines = Status.reader.readLine();
} catch (IOException e) {
    Log.level0("Attempted to read blank line");
}

実際に送信されたデータは次のとおりです。

^M^M01 02 F3^M00 01 F3 3E^M>

しかし、BufferedReader は、>より多くのデータが送信されるまで無視し、次のような結果を取得します。

>0102

コマンドプロンプトからデバイスの実際のデータを確認すると、期待どおりのものが返されます>。存在します。

BufferedReader は私に>. それ以外の場合、この文字を確認する方法はありますか?

4

3 に答える 3

5

このBufferedReader.readLine()メソッドは、一度に 1 行ずつデータを読み取ります。つまり、行末シーケンス ("\n"、"\r"、"\r\n" など) またはストリームの終わりを検出するまで、文字を読み取ろうとします。

readLine()入力データが行指向でない場合は、 を使用して読み取るべきではありません。独自のレコード/メッセージ抽出を行うことをお勧めします。例えば

BufferedReader br = ...
StringBuilder sb = new StringBuilder(...);
int ch = br.read();
while (ch != -1 && ch != '>') {
    sb.append((char) ch);
    ch = br.read();
}
String record = sb.toString();
于 2010-07-14T00:26:00.480 に答える
1

これを確認してください: http://download.oracle.com/docs/cd/E17476_01/javase/1.5.0/docs/api/java/io/BufferedReader.html

代わりに関数public int read() を使用することをお勧めします。

Google では、多くの例を見つけることができます1

于 2010-07-14T00:29:33.437 に答える
0

それらの F3 を使用すると、データは行指向どころか文字指向でもないように見えます。お使いのデバイスは本当に Unicode に準拠していますか?

BufferedInputStream を使用します。

于 2010-07-14T01:33:24.737 に答える