如何管理大型字符串



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

此字符串来自 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();
    }
}

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

提前感谢!

我不知道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) {}
    }
}

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

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

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

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

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

最新更新