我正在尝试从套接字连接中读取数据,并试图弄清楚如何在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用于检查从服务器接收到的请求的确认。

最佳答案

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


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


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


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

关于java - 在DataInputStream中检测STX和ETX,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52106724/

10-10 06:31