我正在使用android中的库连接到终端仿真器,这连接到串行设备(交换机)并向我显示发送/接收的数据。
但是我只是来回发送字节数组,所以我不知道开关处于什么状态,它处于启用更多状态还是配置模式等。这导致我可能以错误的模式输入命令,它们将无法工作。然后,交换机处于不可恢复的模式,因为我发送了错误的命令,无法删除它或进入新行。我现在要解决的问题是我不知道的问题;我不知道开关所处的模式。我知道在发送命令后可以有三种不同的返回提示:
switch>
switch#
switch(config)#
所以我在想,如果我阅读收到的最后两个字符,我就能知道我处于哪种模式。h>,h#和)#
我用这种方法取回数据,只要接收到数据就运行它:
public void onDataReceived(int id, byte[] data)
{
String str = new String(data);
((MyBAIsWrapper) bis).renew(data);
mSession.write(str);
mSession.notifyUpdate();
viewHandler.post(updateView);
}
做到这一点的最佳方法是以某种方式搜索字节数组或将其转换为字符串并在字符串中搜索h>,h#和)#,然后我可以根据获取的值设置全局变量?也许从头到尾搜索?
最佳答案
我会搜索byte[]
并避免从转换为String
的开销。
如果从头开始搜索更有效,则取决于您获得的数据。我无法通过您在问题中发布的小例子来判断这一点。
如果只需要查看最后两个字符:
if(data[data.length-2]=='h' && data[data.length-1]=='>') // "h>"
if(data[data.length-2]=='h' && data[data.length-1]=='#') // "h#"
或者,如果不是那么简单,则使用循环来迭代数组。
P.s.我假设上面的代码为ASCII编码