Java BufferedReader包含“>”时未报告就绪

时间:2010-07-14 00:18:23

标签: java bufferedreader

我之前试过问过这个问题,但我的问题并不清楚。 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呢?

3 个答案:

答案 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。