java - 读取rs232时随机换行

标签 java serial-port newline

我正在开发一个java程序,它通过rs232编写命令并读取温度计的输出。 我正在使用JSSC 。写入部分工作正常,但是当我读取输出并将其转换为字符串并使用 System.out.println() 打印时,会出现一些随机的新行。当我用 System.out.write() 写入结果时,一切正常。 我检查了字节码,没有发现NL字符。

这是我的代码:

public boolean openPort(int rate, int databits, int stopbit, int parity){
    try {
        serialPort.openPort();
        serialPort.setParams(rate, databits, stopbit, parity);
        int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR;//Prepare mask
        serialPort.setEventsMask(mask);//Set mask
        serialPort.addEventListener(new SerialPortReader());//Add SerialPortEventListener

        return true;
    } catch (SerialPortException e) {
        System.out.println(e);
        return false;
    }
}

 static class SerialPortReader implements SerialPortEventListener {

    public void serialEvent(SerialPortEvent event) {
        if(event.isRXCHAR()){//If data is available
                try {
                    byte buffer[] = serialPort.readBytes(event.getEventValue());    
//with system.out.write
                    try {
                        System.out.write(buffer);

                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
//with system.out.println                       
                    String readed = new String(buffer);
                    System.out.println(readed);
                }
                catch (SerialPortException ex) {
                    System.out.println(ex);
                }
        }
        else if(event.isCTS()){//If CTS line has changed state
            if(event.getEventValue() == 1){//If line is ON
                System.out.println("CTS - ON");
            }
            else {
                System.out.println("CTS - OFF");
            }
        }
        else if(event.isDSR()){///If DSR line has changed state
            if(event.getEventValue() == 1){//If line is ON
                System.out.println("DSR - ON");
            }
            else {
                System.out.println("DSR - OFF");
            }
        }
    }
}

这是 println() 的输出:

--- START (C) ---

21.0,
21.1,21.3,
21.1

21.0,
21.2,21.3,
21.2

以及 write() 所需的输出

--- START (C) ---
21.0,21.1,21.3,21.1
21.0,21.1,21.3,21.1

你会说“为什么不直接使用 write()?”,但我需要将此输出转换为字符串。

有人可以帮助我吗?

最佳答案

println 在末尾添加换行符。如果不添加该内容,请使用 print

关于java - 读取rs232时随机换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13387121/

相关文章:

batch-file - 在 MS-DOS 中向文本文件添加新行

java - 使用 JPA 进行更新的最佳方法

java - 在动态创建的主题上向 Kafka 发送消息会出现错误 LEADER_NOT_AVAILABLE

python - 在 Python 中检测 Arduino 端口

c++ - boost asio - 检查是否有任何内容可以从串行端口读取

c - 如何打开用户指定的COM端口?

syntax - 如何在ColdFusion中的字符串中编写换行符?

python - 如何仅替换\n 之后有一些字符

java - 检查两个以上值的重复项,如果没有此类重复项,则插入查询

java - 如何在 switch case 语句中匹配多个输入值?