Как написать файл nt: программно

Я пытаюсь хранить двоичные данные в JCR, который создается на лету. Моя проблема заключается в том, что единственный способ, предоставляемый JCR API, это черезInputStream:

Session session = request.getResourceResolver().adaptTo(Session.class);
ValueFactory valueFactory = session.getValueFactory();
Binary bin = valueFactory.createBinary(is);

Поскольку CQ / Sling является RESTful, я могу понять, почему это так, поскольку вы обычно получаете сообщение в форме или httprequest в другой источник, где у вас всегда естьInputStream использовать. Но в моем случае я создаю двоичный файл на лету, который обычно представляется в видеOutputStream.

Есть ли другой способ, который я упустил в JCR API, где я мог бы создатьOutputStream непосредственно на узле nt: file, какFileOutputStream?Если нет, есть ли простой способOutpuStream превращается вInputStream?

Я знаю, что другой путь доступен от Apache CommonsIOUtils.copy(), Я видел несколько примеров на SO, где они просто используютByteArrayOutputStream.toByteArray() создатьInputStream, Но так как данные могут стать довольно большими, это не очень хорошее решение. Кроме того, я попробовал это, и каким-то образом поток был неполным, так что, похоже, есть предел буфера. Следующий подход был с потоковыми каналами, но там у меня есть другие проблемы, с которыми я открыл другой вопрос:Несколько кавычек приводят к сбою PipedOutputStream / OutputStreamWriter

РЕДАКТИРОВАТЬ: Удален пример кода PipedStream, когда я опубликовал проблему с ним в другом вопросе. Так что здесь я все еще просто ищу простой способ создать файл nt:InputStream.

Ответы на вопрос(2)

Ваш ответ на вопрос