2017-02-09 10 views
0

Я столкнулся с Недостаточно памяти Проблема при загрузке многостраничного файла в Java.Ошибка при выходе из памяти при загрузке многостраничного файла с использованием ByteArrayDataSource

Я использую HttpURLConnection для загрузки файла при получении выпуск в кулак линии:

ByteArrayDataSource ds = new ByteArrayDataSource(con.getInputStream(), 
       "multipart/mixed");   //Line 1 
MimeMultipart multipart = new MimeMultipart(ds);   //Line 2 
     javax.mail.BodyPart jsonPart = multipart.getBodyPart(1); //Line 3 
     javax.mail.BodyPart videoPart = multipart.getBodyPart(2); //Line 4 

Multipart ответ содержит 2 разных файла, один простой текстовый файл и один видео файл.

Весь размер ответа на множественный размер более 1 ГБ.

+0

Какая строка выдает ошибку? Вероятно, вам потребуется обработать поток пошагово, вместо того чтобы пытаться прочитать все сразу. – shmosel

+0

Вы указываете значение памяти Xmx? Вы можете обратиться к: http://stackoverflow.com/questions/14763079/what-are-the-xms-and-xmx-parameters-when-starting-jvms –

+0

@shmosel ByteArrayDataSource ds = new ByteArrayDataSource (con.getInputStream() , "multipart/mixed"); Эта строка дает ошибку. Да, я знаю, но я не получаю надлежащего решения для чтения потока постепенно – pash

ответ

0

Вы не должны загружать весь входной поток в массив байтов, если не убедитесь, что он мал. Вы можете сделать это, временно сохраняя файл в локальной файловой системе. Для больших файлов вам нужно найти альтернативное решение. Либо не разрешать, либо передавать его адресату, поддерживающему потоковое вещание. то есть очередь JMS.