#scalajp #unfiltered OutputStreamに出力

Unfiltered では、ResponseString や ResponseBytes などのオブジェクトを使ってクライアントへレスポンスするけど、直接 OutputStream に書き出したいこともあるので(String や Array[Byte] にため込みたくないでかいデータとか)やり方を調べてみたらなんかあっさりできたので書いときます。

とりあえず ResponseBytes の実装コードを眺めてみると ResponseStreamer ていう trait を extends してて、抽象メソッドの stream に OutputStream が渡ってきてそこで書き込むようになってる。なるほど。

ということでこんな感じのをつくる。

case class ResponseToStream(f: java.io.OutputStream => Unit) extends ResponseStreamer {
  def stream(os: java.io.OutputStream) { f(os) }
}

こんな感じで使える。

def intent = {
  case Path("/hello") => ResponseToStream { os =>
    os.write("hello,".getBytes)
    os.write("world!".getBytes)
  }
}

できたー。