あるドックベースに格納されているあるオブジェクトのコンテンツを、別のドックベースに格納されている別のオブジェクトにコピーしたいと考えています。コピーするファイルが 30 万を超えるため、ファイルを作成したくありません。以下は私のコードの一部です:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(source.getContent(), baos);
[...]
targetObj.setContent(baos); // Documentum DFC
targetObj.save(); // Documentum DFC
JVM を調整しないIOUtils.copy(source.getContent(), baos);
と、java.lang.OutOfMemoryError: Java heap space
.
Xmx max 値を設定して JVM を調整すると、前の命令は問題ありませんjava.lang.OutOfMemoryError: Java heap space
が、targetObj.setContent(baos);
.
わずか 8332175 バイトの大きなコンテンツで... (7.94 MB)
何が問題なのですか?ByteArrayInputStream から ByteArrayOutputStream にコピーするより良い方法は? 他の何か?
一部の Documentum API
getContent
public ByteArrayInputStream getContent() が DfException をスローする
このオブジェクトのコンテンツを Documentum サーバーから ByteArrayInputStream オブジェクトにコピーします。
次のコード例は、>Documentum サーバーからオブジェクトのコンテンツをメモリにコピーする方法を示しています。
IDfSysObject sysObj = (IDfSysObject)session.getObject(new DfId("0900d5bb8001f900")); ByteArrayInputStream bais = sysObj.getContent(); if (bais.available() > 0) { // Data successfully fetched from the server... }
戻り値: オブジェクトのコンテンツを含む ByteArrayInputStream オブジェクト。例外: DfException - サーバー エラーが発生した場合。
と
setContent
public boolean setContent(ByteArrayOutputStream content) は DfException をスローします
新しいコンテンツをオブジェクトに設定します。>作業メモリにあるデータを設定する場合は、このメソッドを使用します。
次のコード例は、メモリ内にあるコンテンツを新しいドキュメントに設定する方法を示しています。
IDfSysObject sysObj = (IDfSysObject)sess.newObject("dm_document"); sysObj.setObjectName("testDoc"); sysObj.setContentType("crtext"); byte b[] = {35,36,37,38,39}; ByteArrayOutputStream out = new ByteArrayOutputStream(); out.write(b, 0, 5); sysObj.setContent(out); sysObj.save();
パラメータ: content - ByteArrayOutputStream としてのコンテンツ。例外: DfException - サーバー エラーが発生した場合。