2011-06-27 8 views
2

OutputStreamをバッファリングして返す前に変更する方法はありますか?コードスニペットは次のとおりです。Buffer&Modify 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

独自01​​を書き込むことができます。

このクラスは、フィルタ出力ストリームのすべてのクラスのスーパークラスです。これらのストリームは、データの基本シンクとして使用される既存の出力ストリーム(基本的な出力ストリーム)の上にありますが、途中でデータを変換したり、追加の機能を提供する可能性があります。 @oliholzとして

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

「それが経由するよう」あなたがデータを変更する一つのアプローチ、です。

もう1つのアプローチは、出力をByteArrayOutputStreamに送信し、内容をバイト配列に抽出し、バイトを変更し、最後にそれらを実際の出力ストリームに書き込みます。

+0

yah、ByteArrayOutputStreamはトリックを行うかもしれませんが、ストリームの書き込みが終了したら内容を変更する必要があります。何か案は?ストリームには2つの関数flush()とclose()があります。 – xybrek