1

我早些时候试图问这个问题,但我的问题不清楚。Java BufferedReader 对字符的操作?

这是我的问题.. 我有一个 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 不会给我>. 有什么方法可以检查这个字符吗?

4

3 回答 3

5

BufferedReader.readLine()方法一次读取一行数据。也就是说,它将尝试读取字符,直到它看到一个行尾序列(例如“\n”、“\r”或“\r\n”)或流的结尾。

如果您的输入数据不是面向行的,那么您不应该使用readLine()它来读取它。我建议你自己做记录/消息提取;例如

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();
于 2010-07-14T00:26:00.480 回答
1

检查这个:http: //download.oracle.com/docs/cd/E17476_01/javase/1.5.0/docs/api/java/io/BufferedReader.html

我建议您改用函数public int read()。

在谷歌你可以找到很多例子1

于 2010-07-14T00:29:33.437 回答
0

有了这些 F3,在我看来,您的数据甚至不是面向字符的,更不用说面向行了。您的设备真的符合 Unicode 标准吗?

我会使用 BufferedInputStream。

于 2010-07-14T01:33:24.737 回答