首页 > 解决方案 > 如何从 Jpos ISO8583 打包文件中读取所有记录,该文件包含一行中的所有记录

问题描述

我有 ISO 打包文件在单行中包含其所有记录。文件内容如 MTI1XXXXXXMTI2XXXXMTI1XXXXXX 所以这里总共有 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();
    } 

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

标签: javajpos

解决方案


你可以尝试这样的事情:

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();
    } 



推荐阅读