vsri
我想从变量public class PortReader implements SerialPortEventListener {
@Override
public void serialEvent(SerialPortEvent event) {
while(event.isRXCHAR() && event.getEventValue() > 0) {
try {
String receivedData = serialPort.readString(event.getEventValue());
tempData = tempData.concat(receivedData);
System.out.println(tempData);
}
catch (SerialPortException ex) {
System.out.println("Error in receiving response from port: " + ex);
}
}
}
}
中删除字符串。如果我将tempData
放在tempData = "";
的末尾。我不知道为什么?有人能帮我解决这个问题吗?如果我不从变量中删除字符串,那么几分钟后我的CPU使用率就会过高。我从GPS天线接收字符串,我从中获取NMEA。
答案 0 :(得分:0)
使用StringBuffer或StringBuilder执行此类活动,在String上执行此操作在内存方面将是一项代价高昂的操作。 此外,它看起来你想从字符串中删除空格使用trim()函数之前附加到StringBuffer
public class PortReader实现了SerialPortEventListener {
StringBuffer sb = StringBuffer();
@Override
public void serialEvent(SerialPortEvent event) {
while (event.isRXCHAR() && event.getEventValue() > 0) {
try {
String receivedData = serialPort.readString(event
.getEventValue());
// check if string is not null before trim
sb.append(receivedData == null ? "" : receivedData.trim());
sb.append(",");
//just print the receivedData in plac of whle sb again and again
System.out.println(receivedData);
} catch (SerialPortException ex) {
System.out.println("Error in receiving response from port: "
+ ex);
}
}
//check if the comma is the last index if so remove that
String tmpData = sb.toString();
tmpData = tmpData.replaceAll(", $", "");
//print the entire data now
System.out.println(tmpData);
}
}