我之前试过问过这个问题,但我的问题并不清楚。 Java BufferedReader action on character?
这是我的问题..我有一个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不会给我>
。有没有什么方法可以检查这个char呢?
答案 0 :(得分:5)
BufferedReader.readLine()
方法一次读取一行数据。也就是说,它将尝试读取字符,直到它看到行尾序列(例如“\ n”,“\ r”或“\ r \ n”)或流的结尾。
如果您的输入数据不是面向行的,那么您不应该使用readLine()
来读取它。我建议你做自己的记录/消息提取; e.g。
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();
答案 1 :(得分:1)
检查一下: http://download.oracle.com/docs/cd/E17476_01/javase/1.5.0/docs/api/java/io/BufferedReader.html
我建议您使用 public int read()函数。
在google上你可以找到很多例子1
答案 2 :(得分:0)
有了这些F3,我认为你的数据甚至不是面向字符的,更不用说面向行。您的设备是否真的符合Unicode标准?
我会使用BufferedInputStream。