#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) } }
できたー。