2012-01-25 7 views
1

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

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

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

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

+0

Кстати, этот вопрос можно считать аналогичным «как я прочитал письмо, прежде чем отправить его (через почту)?». Если вы пишете это самостоятельно, просто прочитайте его; если ваш секретарь пишет это для вас, попросите его/ее копию (лучший способ сделать это зависит от секретаря). –

ответ

0

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

Что вы можете сделать с помощью OutputStream? Почему, вы можете написать ему, и это все. Это означает, что если вы дали (или посмотрите) выходной поток, вам нужно предоставить данные, что означает, что вы уже имеете его.

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

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

Суть в том, что если вы взаимодействуете с выходным потоком, тогда «ваш» код уже имеет данные где-то локально, и это просто вопрос захвата/доступа к нему.

+0

Прежде всего благодаря ответу. Но как я могу проверить ByteArrayOutputStream? Должен ли я преобразовать ByteArrayOutputStream в InputStream? Как я могу это сделать? Заранее спасибо – tt0686

+0

Еще одна вещь, я не могу использовать метод toByteArray, потому что я использую JVM 1.2 – tt0686

+0

По-видимому, до сих пор существует метод 'toByteArray' в 1.2 ([link] (http: //www.eli.sdsu .edu/DOC/jdk1.2/документы/API/Java/IO/ByteArrayOutputStream.html))? AIUI вся суть 'ByteArrayOutputStream' заключается в том, чтобы помещать вывод в массив, на который вы можете попасть, поэтому я не вижу, что класс будет делать, если у него не было этого метода. –

Смежные вопросы