Прочитайте ответ, прежде чем отправить его - PullRequest
1 голос
/ 25 января 2012

Я отправляю пользователю простой текстовый файл через сервлет.

Я использую фреймворк для создания плоского файла.Я получаю файл в браузере, но он пуст.Поэтому я хочу начать отладку, анализируя выходной поток перед отправкой.

Как я могу прочитать ответ, прежде чем отправить его в сервлет?Я думаю, это то же самое, что спрашивать, как я могу преобразовать OutputStream в InputStream.

Я уже видел решения, которые всегда включают ByteArrayOutputStream, и, как вы знаете, когда я вызываю сервлет response.getOutputStream(), он возвращает мне OutputStream, а не ByteArrayOutputStream.

1 Ответ

0 голосов
/ 25 января 2012

Кажется, где-то есть некоторая путаница, хотя я точно не знаю, где именно.

Что вы можете сделать с OutputStream ?Почему, вы можете написать в него, и это все.Это означает, что если вы получили (или посмотрите вверх) выходной поток, то вы должны предоставить данные, а это значит, что они у вас уже есть.вы сами напрямую не вызываете write для OutputStream, но передаете этот поток в библиотеку flatworm (которая, в свою очередь, запишет в него выходные данные).В этом случае у вас есть отладочная «ловушка» - flatworm запишет файл в любой выходной поток, который вы ему отправите.Поэтому в этом случае вместо передачи потока сервлета вы передаете созданный вами поток.

Это может быть ByteArrayOutputStream, который (после возврата метода flatworm) вы можетепроверить, чтобы получить записанные байты.На этом этапе вы можете вручную записать их в выходной поток ответа.Или, может быть, вам нужно сделать что-то немного более хитрое и создать свою собственную потоковую оболочку, которая записывает прямо в базовый поток ответов, но регистрирует в пути - и передает это плоскому червю.вы взаимодействуете с выходным потоком, тогда «ваш» код уже хранит данные где-то локально, и это просто вопрос захвата / доступа к ним.

...