我有一个班级,如此:
private class verifierListener implements SerialPortEventListener {
String outBuffer;
char charBuffer;
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR()) {//If data is available
timeOut = 1000;
lastReadTimer = System.currentTimeMillis();
if (event.getEventValue() > 0) {//Check bytes count in the input buffer
try {
byte[] buffer = verifierPort.readBytes(event.getEventValue());
//INSERT CODE HERE
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
有两种可能的实施方法(在INSERT CODE HERE
区域内)
案例A:
outBuffer = new String(buffer);
bfrFile.print(outBuffer);
sysOutWriter.append(outBuffer);
案例B:
for(byte bt : buffer) {
charBuffer = (char) bt;
bfrFile.print(charBuffer);
sysOutWriter.append(charBuffer);
}
编译和运行,并做他们应该做的事情。但我正在尝试尽可能无缝地执行此代码,因此我不会冒险在低端PC上丢失传输数据。
我假设案例A由于字符串初始化而会有更多的开销,但我想在删除它之前确定。
你们可以告诉哪一个更清洁,和/或如何确定每个人的处理成本?
答案 0 :(得分:1)
如果你使用windows ctrl-alt-delete并在运行时查看线程并查看它使用的内存。就你的代码而言,我建议你使用StringBuilder而不是String。我不确定开销是否确实存在差异,但从良好的代码/编程角度来看,它应该是A。
答案 1 :(得分:1)
即使在低端PC上,也不应丢失任何数据。那是因为你的代码和通过串口传输的实际数据(操作系统缓冲区,Java缓冲区等)之间有(几个)缓冲区。速度方面,除非你经常使用这个代码(例如,每秒几千次),否则你不应该注意到差异。
假设这是一个标准串行连接,并且您以每秒115200位运行,这意味着您每秒最多可获得14,400个字符。即使你一次只读这一个角色,你也不应该看到很快的速度。