【发布时间】:2015-11-18 09:00:34
【问题描述】:
我以非常高的速率从服务器检索数据,发送的数据采用类似于以下格式的消息形式:
$FMSn,par1,par2...,...,...,...,..,...,....,par20 //where n is number ranges from 1 to 12
我需要处理这条消息以解析一些数据。
但服务器以不同格式发送其他消息的频率较低,该消息不重要并且可以被丢弃,它与前面描述的格式消息之间的区别在于 上一条消息以 $FMS 开头,而另一条则不是。
为了区分这些消息以了解应该处理哪个消息,我创建了一个 FMSParser 类,如下所示,并检查消息头是否为
$FMS
或者不。
我的问题是,我应该在接收来自服务器的消息的循环中创建一个 FMSParser 类的新对象,还是在整个循环中创建一个对象 程序并在接收数据的循环中,我只需调用 isValid 方法和 getParam()。换句话说,在代码中:
我应该选择解决方案 1 还是 2?
解决方案 1:
loop for messages receiving:
msg = receive message();
fmsParser = new FMSParser(msg);
if (fmsParser.isValid) {
params = fmsParser.getParam();
}
解决方案 2:
fmsParser = new FMSParser();
loop for messages receiving:
msg = receive message();
if (fmsParser.isValid(msg)) {
params = fmsParser.getParam();
}
代码:
private class FMSParser {
private final static String HEADER = "$FMS"
private String[] mSplittedMsg;
FMSParser() {}
public boolean isValidMsg(String msg) {
boolean isValid = false;
this.mSplittedMsg = msg.split(",");
for (int i = 0; i < 12; i++) {
if (splittedMsg[0].equals(HEADER+i)) {
valid = true;
break;
}
}
return valid;
}
public String [] getParam() {
return this.mSplittedMsg;
}
}
【问题讨论】: