0

我一直在努力处理生成的大字符串,同时尝试将其保存到文件中。

该字符串来自 com.sap.conn.jco.JCoFunction.toXML(); 方法。

我正在尝试这个:

public static void writeXML(JCoFunction jcoFunction, String path){
    File f = new File("C:/XMLFile.xml");

    try {
        BufferedWriter bw = new BufferedWriter(new FileWriter(f));
        bw.write("<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?> ");
        bw.write(jcoFunction.toXML());
        bw.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这应该创建一个大约 45KB 大小的 xml。但是我得到一个java堆空间错误。我需要帮助来制定一种有效的方法,以避免上述错误。

提前致谢!

4

2 回答 2

0

如果 XML 数据确实应该只有 45KB,那么您配置的堆大小要么太小,要么您遇到了 JCo 中的错误(例如,内部无限递归循环)。

如果还没有使用最新的 JCo 补丁级别,我会先安装并尝试这个。也许这个潜在的错误已经同时修复了。目前最新的 JCo 补丁级别为 3.0.16。

如果这没有帮助,请增加 Java 堆空间,例如在启动 Java 程序时指定 JVM 选项 -Xmx1024m(或 -Xmx2048m 甚至更大)。

如果这仍然不能解决问题,您可能需要向 SAP 支持人员解决此问题。

此外,您可以打开 JCo 跟踪级别 8 并检查 JCo 跟踪有多少数据真正传输/存储在您的 JCoFunction 实例中。

于 2017-01-11T11:00:06.620 回答
0

我不知道 JCoFunction。但是,试试这个代码。

private final static int BUFFER_SIZE = 1024;

public static void writeXML(JCoFunction jcoFunction, String path) {
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;

    try {
        bis = new BufferedInputStream(new FileInputStream(new File("C:/XMLFile.xml")));
        bos = new BufferedOutputStream(new FileOutputStream(path));

        byte[] buf = new byte[BUFFER_SIZE];
        int len = 0;
        while((len = bis.read(buf)) >= 0) {
            bos.write(buf, 0, len);
        }

    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e2) {
        e2.printStackTrace();
    } finally {
        try {
            if(bis != null) bis.close();
            if(bos != null) bos.close();
        } catch (Exception e) {}
    }
}
于 2017-01-10T01:07:38.583 回答