如何将消息解码为给定的形式

时间:2012-02-29 07:42:17

标签: java activemq

我有一条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任何人告诉我逻辑..

1 个答案:

答案 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));
}