【初心者】Java質問・相談スレッド110【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0065デフォルトの名無しさん
2007/12/17(月) 23:01:07○今作っているもの:
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 にした。
■ このスレッドは過去ログ倉庫に格納されています