Java BufferedReader包含“时未准备好报告”&燃气轮机&引用;

Java BufferedReader包含“时未准备好报告”&燃气轮机&引用;,java,bufferedreader,Java,Bufferedreader,我之前试着问这个问题,但我的问题不清楚 这是我的问题。。我有一个BufferedReader设置为从设备读取。它读起来很好。我已经把它调好了 if (Status.reader.ready()) { Lines = Status.reader.readLine(); } if (Lines.contains(">")) { log.level1("ready to send data") } 在我向设备发送更多数据之前,缓冲读取器不会报告。问题是,当读卡器包含时,它没有准

我之前试着问这个问题,但我的问题不清楚

这是我的问题。。我有一个BufferedReader设置为从设备读取。它读起来很好。我已经把它调好了

if (Status.reader.ready()) {
    Lines = Status.reader.readLine();
}
if (Lines.contains(">")) {
    log.level1("ready to send data")
}
在我向设备发送更多数据之前,缓冲读取器不会报告
。问题是,当读卡器包含
时,它没有准备好报告。它会保持
>
,直到我输入更多数据

我尝试了以下操作,但没有返回任何结果。它甚至不返回log.level0()

以下是实际发送的数据:

^M^M01 02 F3^M00 01 F3 3E^M>
但是BufferedReader忽略
,直到发送更多数据,然后得到如下结果:

>0102
当我从命令提示符检查设备的实际数据时,它会返回我所期望的结果,

BufferedReader不会给我
。是否有其他方法可以检查此字符?

此方法一次读取一行数据。也就是说,它将尝试读取字符,直到看到行结束序列(例如“\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();
该方法一次读取一行数据。也就是说,它将尝试读取字符,直到看到行结束序列(例如“\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();
选中此项:

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

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

检查以下内容:

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


在谷歌,你可以找到很多F3的例子。在我看来,你的数据甚至不是面向字符的,更不用说面向行了。您的设备真的符合Unicode标准吗


我会使用BufferedInputStream。

对于其中的F3,我觉得您的数据甚至不面向字符,更不用说面向行了。您的设备真的符合Unicode标准吗


我会使用BufferedInputStream。

它传输带有^M分隔符的十六进制数据。然后它使用>请求数据。这是整数数据。没错,所以你根本不应该使用读卡器。见上图。不,它工作正常。我只需要使用read而不是readline。它是以性格为导向的。它非常面向字符。通过(char)read()传递数据;工作非常好,并将我的Delmiter改为\r而不是原始^Mhexidecimal是一种显示字符的方法。这个答案没有抓住要点。设备不需要符合Unicode就可以生成可以在Java中作为字符读取的数据。只需使用提供显式
编码
参数的InputStreamReader来指定流的字符编码。它使用^M分隔符传输十六进制数据。然后它使用>请求数据。这是整数数据。没错,所以你根本不应该使用读卡器。见上图。不,它工作正常。我只需要使用read而不是readline。它是以性格为导向的。它非常面向字符。通过(char)read()传递数据;工作非常好,并将我的Delmiter改为\r而不是原始^Mhexidecimal是一种显示字符的方法。这个答案没有抓住要点。设备不需要符合Unicode就可以生成可以在Java中作为字符读取的数据。只需使用InputStreamReader提供一个显式的
编码
参数来指定流的字符编码即可。这是一个非常长的添加对象的过程。最后的代码从原来的代码变成了一个while循环,循环中有(char)行。read()@亚当·奥特勒——我不明白你在说什么,也不明白这和我的答案有什么关系。这是一个很长的过程,需要添加对象。最后的代码从原来的代码变成了一个while循环,循环中有(char)行。read()@亚当·奥特勒——我不明白你在说什么,也不明白这和我的答案有什么关系。