我有一条activemq消息,消费者收到如下消息:
0327700000260000460000010000047000108Full TalkValue Offer! Get talkvalue of Rs.62 on Recharge of Rs.62.Yourlast Call Charge is 1.000.Your Main Balance is Rs 47.000.00001500001291965355668000001800001604952312808659f9
我必须使用java:
将此消息解码为以下格式DIALOG : 032770
MESSAGE : 000026
Parameter : 000046 [ UNKNOWN ] Length : 1
Value : 0
Parameter : 000047 [ UNKNOWN ] Length : 108
Value : FullTalkValueOffer!GettalkvalueofRs.62onRechargeofRs.62.YourlastCallChargeis1.000.YourMainBalanceisRs47.000.
Parameter : 000015 [ MSISDN ] Length : 12
Value : 919653556680
Parameter : 000018 [ UNKNOWN ] Length : 16
Value : 04952312808659f9
使用以下规则解码消息: 消息的前6个字符是DIALOG,接下来的6个字符是MESSAGE。 之后它将选择接下来的6个字符作为参数。并将在接下来的6个字符中搜索长度。它将忽略0并且它将选择1.如果在这6个字符中的任何位置它将选择那个并且长度将是1之后的数字以及1.根据这个长度,它将选择消息的下一个字符作为值。 之后,它将选择下一个参数和相应的长度和值。
我已经使用String的子字符串方法解码了对话框和消息。但我找不到解码进一步消息的逻辑..plz任何人告诉我逻辑..
答案 0 :(得分:1)
public class Message {
public int dialog;
public int message;
public Map<Integer, String> parameters;
public Message(String input) {
int pos = 0;
dialog = Integer.parseInt(input.substring(pos,pos+6));
pos += 6;
message = Integer.parseInt(input.substring(pos,pos+6));
pos += 6;
parameters = new TreeMap<Integer,String>();
while (pos+12 <= input.length())
{
int param = Integer.parseInt(input.substring(pos,pos+6));
pos += 6;
int len = Integer.parseInt(input.substring(pos,pos+6));
pos += 6;
parameters.put(param, input.substring(pos,pos+len));
pos += len;
}
}
}
Message msg = new Message(input);
System.out.printf("DIALOG : %d\n", msg.dialog);
System.out.printf("MESSAGE : %d\n", msg.message);
for (Integer param : msg.parameters.keySet()) {
System.out.printf("PARAM %d : \"%s\"\n", param, msg.parameters.get(param));
}