Я получаю сообщения размером 14 байт через сокет InputStream
.
Они выглядят так: a55a0b051000000000223664300c
и у них есть определенный образец. Первые два байта предназначены для синхронизации и всегда постоянны.
Я ищу лучший способ проверить это сообщение.
Сначала необходимо проверить длину в 14 байтов, затем первые 2 байта и т. Д.
Это мой подход до сих пор:
public void handleMessage(String msg){
if(msg.length() == 14){
if(msg.substring(0, 1).equals("a5") && msg.substring(2, 3).equals("5a") ){
//Determine tpye
if(msg.substring(4, 5).equals("0b")){
//Type = 05
if(msg.substring(6, 7).equals("05")){
if(msg.substring(8, 15).equals("0b")){
}
}
}
else if(msg.substring(4, 5).equals("6b")){
//Type = 05
if(msg.substring(6, 7).equals("05")){
if(msg.substring(8, 15).equals("0b")){
}
}
}
else if(msg.substring(4, 5).equals("4b")){
// ...
}
else if(msg.substring(4, 5).equals("ab")){
// ...
}
else System.out.println("Error: telegram type");
}else System.out.println("Error: Sync Bytes.");
}else System.out.println("Error: Telegram length.");
}
Но я хочу избежать всех этих вложенных ifs и избыточного кода, который идет с ними.
Любые идеи о том, как обработать строку более эффективным способом?
Спасибо!