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

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 に答える
0

XML データが実際に全体で 45KB しかない場合は、構成されたヒープ サイズが小さすぎるか、JCo のバグ (内部の無限再帰ループなど) に遭遇したかのいずれかです。

最新の JCo パッチ レベルをまだ使用していない場合は、まずこれをインストールして試します。おそらく、この潜在的なバグはすでに修正されています。現在、最新の JCo パッチ レベルは 3.0.16 です。

これで問題が解決しない場合は、Java プログラムの起動時に JVM オプション -Xmx1024m (または -Xmx2048m またはそれ以上) を指定するなどして、Java ヒープ領域を増やしてください。

それでも問題が解決しない場合は、SAP サポートに問い合わせる必要があるかもしれません。

さらに、JCo トレース レベル 8 をオンにして、JCoFunction インスタンスで実際に転送/保存されたデータの量を JCo トレースで確認できます。

于 2017-01-11T11:00:06.620 に答える