4

我的应用程序使用套接字连接到服务器并读取数据。数据最多有四个字符长,但偶尔会少于这个。数据由 CR LF 组合附加,我不想在下一步处理中出现。

由于我不想阅读超过四个字符,所以我有一个char[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在一行中途结束等。

于 2012-07-16T16:17:50.917 回答