コマンドを書き込み、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() を使用しないのですか?」と言うでしょうが、この出力を文字列に変換する必要があります。
誰かが私を助けることができますか?