OutputStream とか writer についてよくわからなくなってきたので教えてください。長文で申し訳ありません。

○今作っているもの:
SAXパーサを使って、入力元のHTMLを少し編集して別のHTMLを生成している。
ここでは「オレパーサ」と呼ぶ(SAXパーサは本件の本題ではない)。
自分で作っているクラスは org.xml.sax.helpers.DefaultHandler
のサブクラスなので、startElement() などのコールバックメソッドの中で、StringBuffer に append
しまくって、最後にsb.toSring() で String として呼び元に返していた。

○問題点:
この方法だと、入力元のHTMLが馬鹿でかいときに OutOfMemory がでてしまう。

○対策:
このクラスは実環境では Servlet の中で動くので、Servlet のなかで
OutputStream os = response.getServletOutputStream() して os をオレパーサのコンストラクタに渡し、
コールバックメソッドの中でそこに出力すればうまく行くかも、と考えた。
ちなみに、なんで reponse.getWrite() でないかというと、
オレパーサのコンストラクタで PrintWriter 型の引数にしてしまうと、下記のSystem.out が渡せないから。

○改良:
これでオレパーサはHttp層と切り離せたが、オレパーサの出力結果をファイルに吐かせたり、
標準出力に出力できるようにしたいと考えた。
標準出力に出すには、オレパーサの呼び元である簡単な Main クラスのなかで、
System.out の out を渡せばいいので、↓のようにオレパーサのコンストラクタは java.io.OutputStream にした。