- - PR -
InputStreamオブジェクトよりバイトデータのサイズを取得したい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-09-30 13:44
お世話になっております。
表題の件について。 とても初歩的な質問かと思いますが、良い方法を思いつきませんのでご教授お願いします。 処理の流れは以下のように考えています。 1.ブラウザよりファイルをアップロードする。 2.アップロードされたファイル情報はフレームワークのAPIに格納されている。 このオブジェクトには、「ファイル名・サイズ・InputStreamオブジェクト」が格納されている。 3.アップロードされたファイルを暗号化する。(暗号化されたInputStreamを取得) 4.暗号化されたInputStreamのサイズを取得する。 5.データをDBへ格納する。 4.の部分なのですが、一旦ファイルへ落とし込み、Fileオブジェクトを作成し、そこからサイズを取得する方法しか思いつきません。 もっとスマートな方法などあればご教授ください。 よろしくお願いします。 |
|
投稿日時: 2004-09-30 13:52
InputStream#available() はいかがでしょうか?
サブクラスの実装依存になりますので注意が必要です。 暗号化された InputStream とは javax.crypto.CipherInputStream でしょうか。 |
|
投稿日時: 2004-09-30 14:05
直接は関係ないかもしれませんが、念のために CipherInputStream を試してみました。
アルゴリズム AES で CipherInputStream を生成し available() を試したところ、戻りは 0 でした。 残念ながら CipherInputStream では available() を オーバーライドしてないみたいですね。 [追記] オーバーライドしていても元のストリームがソケットとかだったらブロックされて 0 が返るかもしれませんし、暗号化の変換をしながらだと全体のバイト数を返すとも限りませんね。 [ メッセージ編集済み 編集者: でゅうく 編集日時 2004-09-30 14:17 ] |
|
投稿日時: 2004-09-30 14:09
思いっきり見逃していました^^;>availableメソッド
ちなみに暗号化されたInputStreamは指摘のとおりCipherInputStreamでした。 すばやいご返答ありがとうございました。 [追記返信] なるほど、だから実装クラスによってavailableメソッドの動作がまちまちなんですね。 当方でも確認してみたところ、0が返ってきました。 となると結局、一番最初に考えた案が妥当になってきそうな気が・・・ [ メッセージ編集済み 編集者: ゆっき 編集日時 2004-09-30 14:27 ] |
|
投稿日時: 2004-09-30 16:21
アップロードされるファイルがそれほど大きくないなら、
java.io.ByteOutputStreamとか使って、一端バイト配列に落としてみてはいかかでしょうか? |
1