在DataInputStream中检测STX和ETX

时间:2018-08-30 23:40:02

标签: java

我正在尝试从套接字连接中读取数据,并试图弄清楚如何在STX和ETX字符/整数之间获取数据。

响应的结构为STX SEQ DATA ETX LRC。我需要阅读STX和ETX之间的所有内容,而忽略校验和(LRC)。

到目前为止,我已经知道了:

 StringBuilder sb = new StringBuilder();
    try {
        int c;
        int prevC = 0;
        while ((c = in.read()) != -1) {
            if(c == 3){
                break;
            }else if(c == 6){
                sb.append(MathOperations.convertIntToHex(c));
                break;
            }
            else{
                sb.append(MathOperations.convertIntToHex(c));
            }
        }
    } catch (Exception e) {
        LOGGER.error("Error reading loop socket ({})", e.getMessage(), e);
    }

    String response = sb.toString();
    LOGGER.info("Received response from remote server - data ({})",response);
    return response;

我目前遇到的问题是LRC数据也附加到字符串。我如何摆脱它?有没有更优雅的方式来读取两者之间的数据?

c == 6用于检查从服务器接收到的请求的确认。

1 个答案:

答案 0 :(得分:1)

  

我目前遇到的问题是LRC数据也附加到字符串。我如何摆脱它?

简单的答案是读取LRC的字节并将其丢弃。

  

是否有一种更优雅的方式仅读取两者之间的数据?

skipBytes(n)方法将执行相同的操作。稍微更优雅...