2012-05-21 9 views
2

Я создал веб-службу с использованием CXF/MTOM для передачи больших файлов (более 700Mo), мне удалось передать файл на сервер, теперь мой вопрос заключается в оптимизации записи данных на диск, я дам примеры:Запись из Datahandler в файл

DataHandler handler = fichier.getFichier(); 

InputStream is = handler.getInputStream(); 

OutputStream os = new FileOutputStream(new File("myFile")); 


byte[] buffer = new byte[BUFFER]; 
int bytesRead = 0; 
while ((bytesRead = is.read(buffer)) != -1) { 
os.write(buffer,0,bytesRead); 
    } 

Использование байт может привести меня к OutOfMemory, поэтому я предпочел бы использовать этот один:

DataHandler handler = fichier.getFichier(); 

handler.writeTo(os); 

это займет 2 минуты для загрузки 700Mo.

Что такое другие эффективные способы?

благодаря

+0

700мб в 2 минуты дают около 50 Мбит/с. Ты уверен, что это не тот, кто тебя задерживает? – npe

+0

правильный, копирование файла локально в течение 1 минуты – bazic

ответ

0

Я предлагаю вам использовать класс IOUtils из Apache Commons IO https://commons.apache.org/proper/commons-io/javadocs/api-release/index.html?org/apache/commons/io/input/package-summary.html

QN: org.apache.commons.io.IOUtils

DataHandler handler = docClient.getContent(sid, docId); 

InputStream is = handler.getInputStream(); 
OutputStream os = new FileOutputStream(new File("C:/tmp/myFile.raw")); 

// This will copy the file from the two streams 
IOUtils.copy(is, os); 

// This will close two streams catching exception 
IOUtils.closeQuietly(os); 
IOUtils.closeQuietly(is);