Буфер и изменение OutputStream - PullRequest
2 голосов
/ 27 июня 2011

есть ли способ буферизовать OutputStream, изменять его до того, как он будет возвращен? Вот мой фрагмент кода:

public ServletOutputStream getOutputStream() throws IOException {
    BufferedOutputStream buffer = new BufferedOutputStream(super.getOutputStream());
    // Modify the buffer contents, before it is returned
    return new DelegatingServletOutputStream(buffer);
}

Спасибо.

Ответы [ 2 ]

2 голосов
/ 27 июня 2011

Поскольку @oliholz ​​- это один из подходов, в котором вы изменяете данные «по мере прохождения».

Другой подход заключается в отправке выходных данных в ByteArrayOutputStream, извлечении содержимого в байтовый массив, изменении байтов и, наконец, записи их в ваш «реальный» выходной поток.

2 голосов
/ 27 июня 2011

Вы можете написать свой собственный FilterOutputStream :

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

    BufferedOutputStream buffer = new BufferedOutputStream(super.getOutputStream());

    FilterOutputStream filter = new FilterOutputStream(buffer) {
        @Override
        public void write( int b ) throws IOException {
            // modify b
            out.write( b );
        }
    };

    return new DelegatingServletOutputStream(filter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...