- PR -

大きなファイルをアップロードするとエラーになる

投稿者投稿内容
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-02-28 18:20
引用:

未記入さんの書き込み (2006-02-28 09:54) より:
InputStream input = file.getInputStream();
byte[] buf = new byte[256];
String strTemp = "";

//ファイルを読み込む
while(input.read(buf) != -1){
String str = new String(buf);
strTemp = strTemp + str;
}



これってまともに読めてますか?
InputStream#read(byte[])は読み込めた長さを返すので、
受け取ったバッファ中で有効なのは戻り値の範囲だけです。
文字化けしたりゴミが付いてしまうと思います。

strTemp = strTemp + str;も危なっかしいですね。
CSVファイルのサイズが500KBになるのであれば、Stringで全体を
繋げながらだと1MB程度の連続領域が瞬間的にふたつ必要になります。
MB単位の連続領域の確保はOutOfMemoryErrorに直結します。

BufferedReaderで1行ずつ(結合せずに)読んで行くのが確実でしょう。

他にもツッコミどころはありますが、とりあえず危険なところだけ。。

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