K.Maebashi's BBS 削除ページ

以下の投稿を削除します。

[2046] Re:flush()について
返信
投稿者:(ぱ)こと管理人
2017/12/13 01:39:52

>すごく基本的な質問かもしれないですが、たとえば「メモリ上にだけ持っていて >ディスクに書き出していないデータがあるかもしれないのでflush」という >イメージは分かるのですが、このサンプルの場合はメモリ上のデータの >やり取りだけなので、flushを何のために行っているのか分かりませんでした。 このサンプルの場合はメモリ上のデータのやり取りだけですが、 それは、Henacatが手抜きのためにレスポンスボディをいったんすべて メモリに乗せているからであり、これでは、巨大なレスポンスを返す際には メモリが無駄になります。場合によっては、レスポンスデータを作りながら どんどんクライアントに返してしまいたいケースもあるでしょう。 その場合、クライアントへのデータの返却を始めてしまったら、 もうレスポンスヘッダの変更はできませんから、途中でエラーが起きても ステータスとして500とかを返すことはできず、200 OKを返すことになって しまいますが、それでもいいからクライアントへのデータ返却を始めてしまいたい、 というニーズはあり得ます。それに対応するために、サーブレットAPIでは 「コミット」という概念を導入しています(p.119)。 http://mergedoc.osdn.jp/tomcat-servletapi-5-ja/javax/servlet/ServletResponse.html#getWriter() その場合、HttpServletResponseのgetWriter()で得られるPrintWriterは、 バッファリングする方がよいでしょう。相手はネットワークだからです。 このように、このPrintWriterはバッファリングする(ようになる)可能性もあるため、 ここではflush()しています。 いずれにしても、バッファリングするしないはPrintWriterの実装詳細に 属することでしょうから、flush()する方が堅実なコーディングではないかと 思います。
パスワード:

管理者削除