2016-11-11 75 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); 
} 

編輯: 見DWB的答案滾動軸承的替代自己的緩衝...

編輯: 也@Nicolas Filotto有更好的建議太...

+0

謝謝,現在*更快*。如果我增加緩衝區,它會更快? –

+0

@Avion:不多。性能瓶頸可能是與數據庫的連接,即從數據庫中讀取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); 
}