java - 在字节数组中查找特定字符?

标签 java android arrays string

我正在使用 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#"

或者如果不是那么简单,使用循环来迭代数组。

附言我假设上面的代码是 ASCII 编码

关于java - 在字节数组中查找特定字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14236029/

相关文章:

java - Spring Boot覆盖war文件名的后缀

java - 可观察内的 RxJava 过滤器列表

android - 在改造 2 的 onResponse 中访问发送的参数

python - 使用 numpy 平铺二维数组

java - 标记不读/写实例状态的方法

Java无效的流头问题

arrays - 修复插入不当的 Postgres 数组

python - 如何将 1d 数组转换为 3d 数组(将灰度图像转换为 rgb 格式)?

java - 如何根据可用空间制作 JLabel 的文本换行?

android - Android 许可的 IllegalArgumentException 错误