如何从Jpos ISO8583打包文件中读取所有记录,该文件在一行中包含所有记录

时间:2019-06-07 21:13:27

标签: java jpos

我的ISO打包文件包含所有记录在一行上。 文件内容如MTI1XXXXXXMTI2XXXXMTI1XXXXX 因此,这里总共3行在一行上。

ISOMsg isoMsg = new ISOMsg(); 
isoMsg.setPackager(packager); 
isoMsg.unpack(filedata);`

isoMsg仅能解压缩第一条记录MTI1XXXXXX

此处MTI1,MTI2,MTI3是4位数字的消息类型指示符(MTI)。

如果我将文件中的这些记录(3行)分开并像下面这样逐行读取

MTI1XXXXXX
MTI2XXXX
MTI1XXXXX

它将返回所有记录。 是否可以使用JPOS ISO8583打包程序或通用打包程序读取单行上的所有记录?

添加我的示例代码片段:

InputStream lis = null;
    try {
        GenericPackager packager;
        packager = new GenericPackager("src/main/resources/BitMapConfig.xml");
        lis = new FileInputStream("src/test/resources/isoTestFile");
        ISOMsg isoMsg = new ISOMsg();
        isoMsg.setPackager(packager);
        isoMsg.unpack(lis);
        ISOBitMap bitmap = (ISOBitMap) isoMsg.getComponent(-1);
        System.out.println("bitmap.getValue::" + bitmap.getValue()); //returns only first records bitmap whoever file contains 3 MTI on single line
    } catch (Exception e) {
        e.printStackTrace();
    } 

我想阅读所有这些内容,并将它们分开放在不同的文件中。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

InputStream lis = null;
    try {
        GenericPackager packager;
        packager = new GenericPackager("src/main/resources/BitMapConfig.xml");
        lis = new FileInputStream("src/test/resources/isoTestFile");
        while (true) {
            ISOMsg isoMsg = new ISOMsg();
            isoMsg.setPackager(packager);
            isoMsg.unpack(lis);
            ISOBitMap bitmap = (ISOBitMap) isoMsg.getComponent(-1);
            System.out.println("bitmap.getValue::" + bitmap.getValue()); 
            //or isoMsg.dump(System.out,"");
        }
    } catch (EOFException e) {
        //assume we just ended the stream
    } catch (Exception e) {
        e.printStackTrace();
    }