4

私のアプリケーションは、ソケットを使用してサーバーに接続し、データを読み取ります。データの長さは最大で 4 文字ですが、これより短い場合もあります。データは CR LF コンボによって追加されますが、これは処理の次のステップには存在したくありません。

4 文字以上は読みたくないので、char[4]バッファーを用意しています。次に、データが 4 文字未満の場合 (および CR および LF 文字が忍び寄る場合) を考慮すると、次のようになります。

for(int i = 0; i < 4; i++) {
    String hexString = Integer.toHexString(buffer[i] | 0x10000).substring(1);
    if((hexString == "000d") || (hexString == "000a")) {
        buffer[i]='0';
    }
}

適切にログを記録すると、ループが期待どおりに動作することがわかりますが、CR (U+000d) および LF (U+000a) 文字は上書きされません。上記のコードは、キャリッジ リターンまたはライン フィードのすべてのインスタンスを '0' に置き換えることを期待していますが、バッファの内容は変更されていないようです。

正直に言うと、とにかくこれは不器用な方法のように感じるので、私の質問は分岐します:

  1. コードの何が問題になっていますか? 期待どおりに動作するように修正するにはどうすればよいですか?
  2. これを行うより良い方法はありますか?
4

1 に答える 1

4

最初は次の方法を使用BufferedReaderしたほうがよいようです。readLine()

BufferedReader reader = new BufferedReader(new InputStreamReader(stream, charset));
try {
    String line;
    while ((line = reader.readLine()) != null) {
        processLine(line);
    }
} finally {
    reader.close();
}

readここの行には行セパレーターが含まれていないため、 への 1 回の呼び出しが行の途中で終了するかどうかなどについて心配する必要はありません。

于 2012-07-16T16:17:50.917 に答える