gpt4 book ai didi

java - 如何解析数据/字节数组?

转载 作者:行者123 更新时间:2023-12-02 07:18:27 26 4
gpt4 key购买 nike

我正在使用终端仿真器库来创建终端,然后使用它将通过串行输入的数据发送到串行设备。并不是说我有这样的工作,我想在屏幕上创建一些其他图形界面,也许只是一个文本框,它为用户显示结果的简短版本以及终端中的完整版本。他们只需看一眼即可更快地查看结果。我想知道如何最好地解析它。当我发送命令时,一个字节数组会发送回给我,其中包含如下数据作为一组结果的示例:

Interface           IP-Address       Status                Protocol        
vlan1 192.168.1.1 up up
Fa0/1i unassigned administratively down down
Fa0/1o unassigned down down
Fa1/0 unassigned down down
Fa1/1 unassigned down down
Fa1/2 unassigned down down
Fa1/3 unassigned down down
Fa1/4 unassigned down down
Fa1/5 unassigned down down
Fa1/6 unassigned down down
Fa1/7 unassigned down down
Fa1/8 unassigned up up
Fa1/9 unassigned down down
Fa1/10 unassigned up up
Fa1/11 unassigned down down
Gi0 unassigned up up
switch#

我该如何解析这个?我想要类似“接口(interface) vlan1 已启动,IP 为 192.1.1.168”或“接口(interface) Fa1/8 已启动,但未分配的 IP 地址”。向用户显示,仅列出最相关的数据。我会说这样的话吗:

    if (dataReceived.charAt(i) == 'v'
&& dataReceived.charAt(i + 1) == 'l'
&& dataReceived.charAt(i + 2) == 'a'
&& dataReceived.charAt(i + 3) == 'n')
&& dataReceived.charAt(i + 4) == '1')
&& etc //check i is in bounds, check is the next non-whitespace character a number or a u somehow and so on
{
//do things here
//print out "The interface vlan1 is up with an IP of 192.1.1.168"
}

这种方式看起来相当乏味,检查每个字节,看看下一个字节是什么等等。但这是最好/正确的方法吗?

编辑:这是我目前拥有的一个示例,我正在其中接收数据,并在其中测试某些数据:

public void onDataReceived(int id, byte[] data) {


dataReceived = new String(data);


try {
dataReceivedByte = dataReceived.getBytes("ASCII");
} catch (UnsupportedEncodingException e) {
Log.d(TAG, "exception");
e.printStackTrace();
}
statusBool = true;
Log.d(TAG, "in data received " + dataReceived);
((MyBAIsWrapper) bis).renew(data);


runOnUiThread(new Runnable(){

@Override
public void run() {


}});
viewHandler.post(updateView);
}


Handler viewHandler = new Handler();
Runnable updateView = new Runnable() {
@Override

public void run() {

mEmulatorView.invalidate();

if (statusBool == true) {
for (int i = 1; i < dataReceived.length() - 1; i++) {

if (dataReceived.charAt(i) == '>') {

Log.d(TAG, "found >");
deviceStatus = 0;
}
if (dataReceived.charAt(i) == '#'
&& dataReceived.charAt(i - 1) != ')') {

Log.d(TAG, "found #");
deviceStatus = 1;
}
if ((i + 1) <= (dataReceived.length())
&& dataReceived.charAt(i) == ')'
&& dataReceived.charAt(i + 1) == '#') {

Log.d(TAG, "found config )#");
deviceStatus = 2;
}

}
statusBool = false;
viewHandler.postDelayed(updateView, 1000);

}
}
};

最佳答案

当您使用 charAt() 时,我认为 dataReceived 是一个 String。如果没有,将数据转换为字符串可能会很方便,因为您可以使用方便的 String 方法。您可以使用 String(byte[]) 将字节数组转换为字符串构造函数。

所以,您也可以使用 contains()检查字符串是否包含特定子字符串的方法:

if(dataReceived.contains("vlan1")) {
// do things here
}

或者,如果您对子字符串的位置感兴趣,可以使用 indexOf() .

关于java - 如何解析数据/字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14608660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com