【问题标题】:How to read all records from Jpos ISO8583 packaged file which contains all records in one line如何从 Jpos ISO8583 打包文件中读取所有记录,该文件包含一行中的所有记录
【发布时间】:2019-06-07 21:13:27
【问题描述】:

我有 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 打包器或通用打包器读取单行上的所有记录?

添加我的示例代码 sn-p:

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

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

【问题讨论】:

  • 您有什么顾虑?性能?
  • 不,当我使用 unpack 方法时,它只返回第一条记录而不是所有 3 条记录。 ISOMsg isoMsg = 新 ISOMsg(); isoMsg.setPackager(打包器); isoMsg.unpack();
  • 究竟什么是“ISO 打包文件”?
  • ISO打包文件是指它是一个记录有ISOMsg和打包器一起打包的文件,打包器可以是ISO8583或者一些GenericPackager
  • 第一个示例数据中的 MIT1 是错字吗?

标签: java jpos


【解决方案1】:

你可以试试这样的:

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


【讨论】:

  • 这个我已经试过了 :) 它只返回第一条记录 :( 这种情况就像 JPos API 忽略了在同一行找到的下一个 MTI。
  • 你能输入你已经尝试过的确切代码吗? jpos api 本身不会忽略任何东西。由您决定读取下一个字节,这个答案会读取一条消息,然后传递下一条消息将从上一条结束的位置开始解析。请注意,这是使用输入流而不是文件内容。
  • 嗨 Andres,我已在说明中附上了 sn-p
  • 你没有while,你只是从输入流中读取第一条消息,你需要继续阅读,这就是这个答案中while的目的
  • 我刚刚修改了我的答案,包括对您提供的代码的修改,同时到位
猜你喜欢
  • 1970-01-01
  • 2013-04-08
  • 2011-03-04
  • 2021-01-05
  • 1970-01-01
  • 2022-12-06
  • 2019-07-28
  • 2021-04-18
相关资源
最近更新 更多