2016-11-11 5 views
0

私はデータベースの列からBLOBを読み込み、FileOutputStreamを使用してファイルに保存しています。InputStreamからの読み込み速度とFileOutputStreamによる書き込み

これは私のコードです:

InputStream binaryFile = rs_ivol.getBinaryStream("BLOB_COLUMN_FROM_BY_DB"); 
FileOutputStream outputFile = new FileOutputStream(myoutpath); 
int aux = 0; 
while ((aux = binaryFile.read()) != -1) 
{ 
    outputFile.write(aux); 
} 

事は、これはextremelly遅いことです。私は58225以上のアイテムを変換する必要があり、最大24時間かかります。

誰かが私が読み取りから-のInputStream書き込みツーたFileOutputStream何とか速いことを確認する方法を教えてもらえますか?

ありがとうございます。

答えて

2

バッファを使用して読み書きします。

InputStream binaryFile = rs_ivol.getBinaryStream("BLOB_COLUMN_FROM_BY_DB"); 
FileOutputStream outputFile = new FileOutputStream(myoutpath); 
int aux = 0; 
byte[] buffer = new byte[1024]; 
while ((aux = binaryFile.read(buffer)) > 0) 
{ 
    outputFile.write(buffer, 0, aux); 
} 

EDIT:あなた自身のバッファを転がりへの代替のための 参照DWBの答え...

EDIT:あなたと仮定すると はまた@Nicolas Filottoがあまりにも優れた提案を持っている...

+0

ありがとうございます、今は少し速いです*。そのバッファを増やすと、さらに高速になりますか? –

+0

@Avion:あまりありません。パフォーマンスのボトルネックはおそらくDBへの接続、すなわちDBからのBLOBの読み取りである。 –

+0

ストリームを閉じることを忘れないでください –

1

のJava 7以上を持っていて、次のようFiles.copy(InputStream in, Path target, CopyOption... options)を使用することを検討して、車輪の再発明をしたくない:

try (InputStream binaryFile = rs_ivol.getBinaryStream("BLOB_COLUMN_FROM_BY_DB")) { 
    Files.copy(binaryFile, Paths.get(myoutpath), StandardCopyOption.REPLACE_EXISTING); 
} 
関連する問題