- PR -

ServletOutputStreamを使った出力について

1
投稿者投稿内容
mikan
ベテラン
会議室デビュー日: 2002/08/19
投稿数: 58
投稿日時: 2003-01-21 21:06
java.io.FileInputStreamで得た入力ストリームを、response.getOutputStream()で
得たjavax.servlet.ServletOutputStreamに出力するサーブレットを作成しています。

はじめは read() で得たint値を、write(int) で出力していたのですが、対象となる
データが数10KB〜数100KBくらいですので、さすがに1バイトずつでは無謀かなと思い
1024個のバイト配列を以って、read(byte[]) と write(byte[], int, int) を使うよ
うにしました。

しかしj2ee1.3のドキュメントを読むと、ServletOutputStreamクラスのwrite系メソ
ッドはオーバーライドせずにOutputStreamから継承しているようにみえ、また
j2se1.4のドキュメント:write(byte[], int, int) には

引用:

OutputStream の write メソッドでは、書き込むバイトごとに引数が 1 個のメソッドを呼び出します。サブクラスでは、このメソッドをオーバーライドし、より効率的に実装してください。


とあります。

結局、1バイトずつ読み書きしているのと同じなのでしょうか。
tabby
ベテラン
会議室デビュー日: 2002/06/26
投稿数: 55
お住まい・勤務地: 埼玉県・東京都
投稿日時: 2003-01-21 21:29
ServletOutputStreamのドキュメントに以下のような記述があります。
サーブレットコンテナでどのような実装をしているかに依存するので、
一概にこうだとは言えないと思います、が・・・
よっぽど手抜きをしたものでなければ、まっとう?な実装がなされていると思います。

引用:

このクラスは abstract クラスとなっていますが、実装はサーブレットコンテナが提供します。このクラスのサブクラスは、java.io.OutputStream.write(int) メソッドを実装する必要があります。



#でも、そんな実装(1バイトずつ)をする製品があったら見てみたいかも
mikan
ベテラン
会議室デビュー日: 2002/08/19
投稿数: 58
投稿日時: 2003-01-21 22:13
いまいち'実装'とか'コンテナが提供'というのがピンとこなくて...
write系は

>クラス java.io.OutputStream から継承したメソッド

ってところにまとめられているから、OutputStreamのwriteメソッドそのままなのか
なぁ、と思っていました。

とりあえず、まっとうな実装であることを信じて、気にしないようにします(^^;
1

スキルアップ/キャリアアップ(JOB@IT)