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: Не так много. Узким местом производительности будет, вероятно, соединение с БД, то есть чтение 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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^