Там, кажется, какая-то путаница, хотя я точно не знаю, где именно.
Что вы можете сделать с помощью OutputStream? Почему, вы можете написать ему, и это все. Это означает, что если вы дали (или посмотрите) выходной поток, вам нужно предоставить данные, что означает, что вы уже имеете его.
Возможно, с другой стороны, вы напрямую не вызываете write
на OutputStream, но передаете этот поток в библиотеку flatworm (которая, в свою очередь, будет выводить на него вывод). В этом случае там будет отладка «hook» - flatworm выведет файл в любой выходной поток, который вы его отправляете. Поэтому в этом случае вместо передачи в поток сервлета вы передаете поток, который вы создали сами.
Это может быть ByteArrayOutputStream
, который (после возврата метода flatworm) вы можете проверить, чтобы получить записанные байты. На этом этапе вы можете вручную записать их в выходной поток ответа. Или, может быть, вам нужно сделать что-то немного сложнее и создать свою собственную поточную оболочку, которая записывается прямо в основной поток ответов, но записывается в пути - и передайте это в flatworm.
Суть в том, что если вы взаимодействуете с выходным потоком, тогда «ваш» код уже имеет данные где-то локально, и это просто вопрос захвата/доступа к нему.
Кстати, этот вопрос можно считать аналогичным «как я прочитал письмо, прежде чем отправить его (через почту)?». Если вы пишете это самостоятельно, просто прочитайте его; если ваш секретарь пишет это для вас, попросите его/ее копию (лучший способ сделать это зависит от секретаря). –