代码之家  ›  专栏  ›  技术社区  ›  Adam Outler

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

  •  1
  • Adam Outler  · 技术社区  · 14 年前

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

    3 回复  |  直到 8 年前
        1
  •  1
  •   oagostinho    14 年前

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

    我建议你使用这个函数 改为public int read()。

        2
  •  5
  •   Stephen C    14 年前

    这个 BufferedReader.readLine()

    如果您的输入数据不是面向行的,那么您不应该使用 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();
    
        3
  •  0
  •   user207421    14 年前

    有了这些F3,我觉得你的数据甚至不面向字符,更不用说面向行了。你的设备真的兼容Unicode吗?