java 缓冲和修改输出流

ef1yzkbh  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(127)

有没有办法缓冲一个输出流,在它返回之前修改它?下面是我的代码片段:

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

谢谢。

x6492ojm

x6492ojm1#

@oliholz给出的答案是一种方法,在这种方法中,您可以在数据“通过”过滤器流到达目的地时修改数据。
另一种方法是将输出发送到ByteArrayOutputStream,将内容提取到字节数组,修改字节,最后将它们写入“真实的的”输出流。
或者,您可以扩展ByteArrayOutputStream并覆盖其close()方法,以便在流关闭时执行操作......如果这是您的意思的话;或者,您可以覆盖getBytes,以便在返回字节之前对其进行修改;或者,您可以覆盖write方法,以便在写入字节时对其进行修改。

g6ll5ycj

g6ll5ycj2#

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

相关问题