java 8583报文解析_ISO8583报文解析

1 packagecom.handle8583;2

3 importjava.io.UnsupportedEncodingException;4 importjava.util.ArrayList;5 importjava.util.Collections;6 importjava.util.Comparator;7 importjava.util.HashMap;8 importjava.util.List;9 importjava.util.Map;10 importjava.util.Properties;11 importjava.util.Set;12

13 importcom.parseToString.FileTools;14 /*

15 * @description:16 * 准备包含8583报文头、报文类型标识、位图、报文体各域的ISO8583metadata.xml配置文件17 * 准备8583十六进制报文18 * 使用SAXReader读取ISO8583metadata.xml文件,将文件中的内容解析成Map19 * 使用文件输入流读取8583十六进制报文到字节数组输出流,字节数组输出流转换为字节数组20 * 将字节数组转换成字符串,此刻字符串的内容与十六进制里的内容完全一致,并将字符串换行、空去掉21 * 将字符串转换成字节数组(即将十六进制转换成十进制的字节数组)22 * 解析报文头(根据ISO8583metadata.xml中:isBCD确定编码、length确定长度、encoding确定编码、name作为标签名。现根据长度截取,再判断isBCD编码,根据相应的编码解码。)23 * 解析报文类型标识(根据长度,byte子数组,根绝对应的encoding编码进行解码)24 * 解析位图(判断第一个字节的二进制最高位是否为1,为1则使用扩展位图,为0则不使用扩展位图;根据长度获取byte字数组,转换成对应的二进制;根据二进制判断存在哪些域有值)25 * 解析报文体(将存在的域循环进行处理:判断是否变长,如果变长,先获取变长所表示的长度值,比如n..11(LLVAR)为两位变长,有两个字节表示长度,先拿两个字节计算本域所占几个字节,再获取相应字节数,再根据encoding编码进行解码;如果非变长,直接根据length获取长度,再根据encoding编码进行解码)26 * 将解析完成的8583报文信息所在的Map排序,便于打印阅览(此处不再说明,看代码即可)27 *28 * @warn注意点29 * 对于0~9的数字30 * 十六进制转换成十进制,相应于BCD码转换成十进制31 * 一个十六进制相当于一个byte,相当于两个[0,9]32 *33 * @see34 * 8583报文拆组包关键点:35 * 报文头各域、表问类型标识、位图或者报文体域所使用的编码方式,比如BCD编码还是普通的十六进制36 * 位图的使用37 * 报文体域的变长处理38 *39 * @see40 * 拆组包8583报文需要对于编码和解码、进制转换、字符集有一个充分和系统的了解41 */

42 public classParse8583 {43 static int currentIndex = 0;44 static Map map =Bean8583Factory.getInstance().getMap();45 public static void main(String[] args) throwsUnsupportedEncodingException {46 //获取8583报文

47 byte[] resp = FileTools.readContent("D:/workspace/springweb/src/com/handle8583/8583resp.txt"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值