Я хочу скопировать содержимое из одного объекта, хранящегося в одной базе документов, в другой объект, хранящийся в другой базе документов. Я не хочу создавать файл, потому что у меня есть более 300 тысяч файлов для копирования. Ниже часть моего кода:
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
.
Если я настрою JVM, установив максимальное значение Xmx, предыдущая инструкция в порядке, но java.lang.OutOfMemoryError: Java heap space
происходит с targetObj.setContent(baos);
.
С большим содержимым всего 8332175 байт ... (7,94 МБ)
Есть идеи, что случилось? Лучший способ скопировать из ByteArrayInputStream в ByteArrayOutputStream? Что-то еще?
Некоторые API Documentum
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)
выдает 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 - если ошибка сервера происходит.