0

コマンドを書き込み、rs232 を介して温度計の出力を読み取る Java プログラムに取り組んでいます。私はJSSCを使用しています。書き込み部分は正常に動作しますが、出力を読み取り、それを String に変換して 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() を使用しないのですか?」と言うでしょうが、この出力を文字列に変換する必要があります。

誰かが私を助けることができますか?

4

2 に答える 2

0

println最後に改行文字を追加します。それを追加しない場合は、を使用しますprint

于 2012-11-14T20:56:27.347 に答える