当前位置: 首页 > 知识库问答 >
问题:

MalformedInputException在AS400上通过Java对运行时进程执行(cobol obj)的结果进行流式处理时

锺星洲
2023-03-14

我正试图通过Java调用一个简单的Hello World Cobol程序。Java代码采用IFS文件结构,而cobol对象则停放在一个库中。我面临着多重问题:

  1. 进程执行返回的错误流不是可读格式。
  2. 即使cobol代码的终止返回0,我也会得到错误流结果。
  3. 我在进程的inputstream中看不到cobol输出结果。(如果我理解错误流,也许我可以解决这个问题)

cobol代码在独立调用时起作用。我已经尝试编码UTF8、UTF16、Cp943和Default。当我使用UTF8、UTF16时,我会得到MalformedInputException,否则就是一个垃圾值。

Java代码:(编译@AS 400本身-Java 1.5)


    import java.io.*;

    public class CallCLPgm
    {
       public static void main(String[] args)
       {
          try
          {
          Process theProcess =  Runtime.getRuntime().exec("system CALL PROG6");
          //error stream
            BufferedReader inStream1 = new BufferedReader(new InputStreamReader
                     (theProcess.getErrorStream(),"UTF8"));
             System.out.println(inStream1.readLine());
            inStream1.close();
          //input stream   
             BufferedReader inStream = new BufferedReader(new InputStreamReader
                     (theProcess.getInputStream()));
             System.out.println(inStream.readLine());
             inStream.close();


             System.out.println("termination : "+theProcess.waitFor());

 
 //Cobol code
      PROCEDURE DIVISION.        
      PROGRAM-BEGIN.     
          DISPLAY "Hello World".   
          STOP RUN.  

共有1个答案

景安翔
2023-03-14

我应该把重点放在IBM编码格式http://publib.boulder.IBM.com/html/as400/v4r5/ic2924/index.htm?info//rzaha/fileenc.htm上

我对USA使用了“CP037”,而不是UTF8和其他格式。

BufferedReader inStream1=new BufferedReader(new InputStreamReader(TheProcess.getErrorStream(),“CP037”));

 类似资料:
  • 问题内容: 在对mysql查询进行排名时如何处理联系?在此示例中,我简化了表名和列,但它可以说明我的问题: 因此,假设上面的查询产生了: 即使Al和Amy的成绩相同,一个人的排名也比另一个高。艾米被偷走了。我如何才能使Amy和Al具有相同的排名,以使他们俩的排名都为1。而且,William和Mary没有参加考试。他们挤在教室里,在男孩的房间里抽烟。他们应该并列最后的位置。 正确的排名应该是: 如果

  • 我正在尝试使用Apache Nifi实现下面的工作流: executesql-这是从avro格式的oracle数据库中获取数据 puthdfs-这是将数据放入HDFS executeProcess--这个处理器在后台执行bash脚本,然后创建外部配置单元表

  • 本文向大家介绍cmd运行python文件时对结果进行保存的方法,包括了cmd运行python文件时对结果进行保存的方法的使用技巧和注意事项,需要的朋友参考一下 当用cmd命令行运行python文件时,我们知道可以通过 来运行python文件,此时的输出会直接打印到cmd输出行中,如果希望将运行直接保存而不是即时输出,除了在python代码中直接写入保存,还可以通过命令行: 保存到当前文件目录下,或

  • 我们使用Cassandra的用例是显示一篇博客文章的前10名最近访问者。以下是Cassandra表定义 现在,为了显示给定博客帖子的前10名最近访问者,需要在时间戳desc上有一个明确的“order by”子句。因为visted_ts不是Cassandra中集群列的一部分,所以我们无法完成这项工作。visited_ts不是集群列的一部分的原因是为了避免记录重复(读为重复)访问者。主键的设计方式是为

  • 问题内容: 在 pipe 上使用2个 队列 在进程之间进行通信有什么优势(如果有)? 我正在计划使用python模块。 问题答案: 最大的好处是队列是进程和线程安全的。管道不是:如果两个不同的进程试图读取或写入pipe的同一端,则会发生不良情况。队列的抽象级别也比管道更高,这在您的特定情况下可能有优势,也可能没有优势。

  • 问题内容: 我有一个看起来像下面的文档: data.txt 我使用正则表达式对其进行了处理,并返回了如下的新处理文档: 这将返回已处理的MyClass的列表。可以并行运行,一切正常。 问题是我现在有这个: data2.txt 因此,我需要以某种方式加入正在从流中读取的行,直到出现新的匹配项为止。(有点像缓冲区吗?) 我尝试收集字符串,然后收集MyClass(),但没有成功,因为我实际上无法拆分流。