> オレパーサのコンストラクタで PrintWriter 型の引数にしてしまうと、下記のSystem.out が渡せないから
new PrintStream(System.out) を渡せ。最後に flush() すればいい。

> これだとバッファリングが効いているのでしょうか
利かない。だがバッファリングが必要かどうかは呼び出し側で決めること。中で暗黙的にバッファリング
すると返ってオーバーヘッドになってしまうだけの場合もある。

> PrintWriter#print(String) というように print というメソッドがあるといいのですが、
new PrintWrier(new BufferedWriter(new OutputStreamWriter(out)));

> 毎回 flush() させていると、質問1.で BufferedWriter をかませる意味がなくなりますか?
あまりなくなる。だが BufferedWriter はバッファが一杯になると勝手に flush するから
endDocument() で flush() すれば良い。

> FileWriter を渡すべき? それとも FileOutputStream を渡すべき?
引数: Writer、実体: FileWriter で良いんじゃねーの。