Java BufferedReader在包含">"时未报告就绪

Ada*_*ler 1 java bufferedreader

我之前试过问过这个问题,但我的问题并不清楚.Java BufferedReader对字符的操作?

这是我的问题..我有一个BufferedReader设置为从设备读取.它阅读得很好.我把它设置为

if (Status.reader.ready()) {
    Lines = Status.reader.readLine();
}
if (Lines.contains(">")) {
    log.level1("ready to send data")
}
Run Code Online (Sandbox Code Playgroud)

>我向设备发送更多数据之前,缓冲读卡器不会报告.问题是,当读者包含>它时,它没有报告准备就绪.它保持>直到我输入更多数据.

我尝试了以下内容,它什么也没有返回.它甚至没有返回log.level0()

Lines = ""

try {
    Lines = Status.reader.readLine();
} catch (IOException e) {
    Log.level0("Attempted to read blank line");
}
Run Code Online (Sandbox Code Playgroud)

这是发送的实际数据:

^M^M01 02 F3^M00 01 F3 3E^M>
Run Code Online (Sandbox Code Playgroud)

但是BufferedReader会忽略>直到发送更多数据,然后得到如下结果:

>0102
Run Code Online (Sandbox Code Playgroud)

当我从命令提示符检查设备的实际数据时,它返回我所期望的,>它存在.

BufferedReader不会给我的>.有什么方法我可以检查这个char否则?

Ste*_*n C 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();
Run Code Online (Sandbox Code Playgroud)