我的应用程序使用套接字连接到服务器并读取数据。这些数据最多只有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'替换回车或换行的任何实例,但缓冲区的内容似乎没有改变。
说实话,无论如何这感觉就像是一种笨拙的方式,所以我的问题分歧了:
答案 0 :(得分: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
的单个调用是否会在行中途等结束。