2011-06-27 97 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