缓冲区&修改OutputStream

时间:2011-06-27 07:09:48

标签: java servlets io

有没有办法缓冲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 个答案:

答案 0 :(得分:2)

您可以自己编写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);

答案 1 :(得分:2)

由于@oliholz是一种方法,您可以在其中“修复”数据。

另一种方法是将输出发送到ByteArrayOutputStream,将内容提取到字节数组,修改字节,最后将它们写入“实际”输出流。