2011-06-27 100 views
2

是否有缓冲OutputStream的方法,在返回之前对其进行修改?这里是我的代码片段:缓冲区和修改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

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

感谢您的快速响应。 – xybrek

+0

DelegatingServletOutputStream如何工作? – manalang

+0

我想做同样的事情,但是当我尝试你的解决方案时,b被附加不被替换。在调试时,我的代码在ByteArrayOutputStream类中结束,并执行system.arraycopy,从而将b附加到原始内容。任何其他想法? – MystyxMac

2

由于@oliholz是一种方法,在其中修改数据“因为它经过”。

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

+0

yah,ByteArrayOutputStream可能会诀窍,但是当流完成写入时,我需要修改内容。有任何想法吗?流中有两个函数flush()和close(),它们会告诉你这是正确的吗? – xybrek