- PR -

BodyPartのgetSize()失敗について

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/08/19
投稿数: 10
投稿日時: 2005-08-19 15:56
MimeMultipart mime から bodyPart = mime.getBodyPart(xxxx)
を取得し、ファイルである場合は保存するプログラムを作っています。

下記コードの"@"の部分で、bodyPart.getSize()が不明を示す-1が戻る場合があります。
-1の場合でもデータは存在しているので、byte[適当な数字]とすれば保存は可能です。
データ(bodyPart)は存在しているのに、なぜgetSize()で-1になってしまうのでしょう?
#今のところ実装環境によって成否が変わります。-1が発生するのは、j2sdk1.4.2_09です。

----------------------------------
このサイズはコンテンツサイズの正確な測定値でない場合があり、
コンテンツの任意の転送エンコーディングを示す場合も示さない場合もあります。
このサイズは、ユーザに対してこの Part のサイズに関する概要を知らせるために、
ユーザインタフェースで表示するのに適しています。
----------------------------------
↑とのような記述もあり、そもそも私のコードのような使い方は好ましくないのでしょうか?
だとしたら、どのような方法があるのでしょうか?

try{
FileOutputStream out = new FileOutputStream(outputFileName);
//@
byte[] buffer = new byte[bodyPart.getSize()];//bodyPartのファイルサイズ取得

InputStream in ;
in = bodyPart.getInputStream();

int length;
while((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
out.close();

}catch (IOException err){
System.err.println("System Error: " + err.toString());
}catch (MessagingException err){
System.err.println("System Error: " + err.toString());
}
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-08-19 17:43
リファレンスの記述から見て、このメソッドには正確なサイズを返すことは求められていない、
ということでしょう。したがってこのメソッドで取得した値をファイルサイズとして使用する
のは適当ではないでしょうね。だとすると、バッファのサイズはこのメソッドがどのような
値を返すかによらず、適当な値を使うのがいいのではないでしょうか。
未記入
会議室デビュー日: 2005/08/19
投稿数: 10
投稿日時: 2005-08-19 18:09
>バッファのサイズはこのメソッドがどのような
>値を返すかによらず、適当な値を使うのがいいのではないでしょうか。

そうですよね。
バッファとはいえ値が取れるなら欲しかったのですが、適当な値を使うことにします。
一応取得できるときもあるので、失敗時に切換えということで。
正確なのが欲しいときは、呼び側で元のサイズ取得したのを渡す等にすればなんとかなりますし。

#少々愚直な質問でしたね。わざわざレスありがとうございます。
1

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