Java 缓冲区及;修改输出流
有没有办法缓冲OutputStream,在返回之前对其进行修改?以下是我的代码片段:Java 缓冲区及;修改输出流,java,servlets,io,Java,Servlets,Io,有没有办法缓冲OutputStream,在返回之前对其进行修改?以下是我的代码片段: public ServletOutputStream getOutputStream() throws IOException { BufferedOutputStream buffer = new BufferedOutputStream(super.getOutputStream()); // Modify the buffer contents, before it is returned
public ServletOutputStream getOutputStream() throws IOException {
BufferedOutputStream buffer = new BufferedOutputStream(super.getOutputStream());
// Modify the buffer contents, before it is returned
return new DelegatingServletOutputStream(buffer);
}
谢谢。你可以自己写:
此类是过滤输出流的所有类的超类。这些流位于已经存在的输出流(底层输出流)之上,它将该输出流用作其基本数据接收器,但可能会沿途转换数据或提供附加功能
因为@oliholz是一种方法,在这种方法中,您可以“在数据通过时”修改数据
另一种方法是将输出发送到ByteArrayOutputStream,将内容提取到字节数组中,修改字节,最后将它们写入“真实”输出流。Yeh,ByteArrayOutputStream可能会实现这一目的,但我需要在流完成写入后修改内容。有什么想法吗?流中有两个函数,flush()和close(),这两个函数可以说明这一点,对吗?我想做同样的事情,但当我尝试您的解决方案时,b被追加而不是替换。调试时,我的代码以ByteArrayOutputStream类结束,并执行system.arraycopy,从而将b附加到原始内容中。还有其他想法吗?
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);