2015-01-09 2 views
0

Я не могу понять, что я делаю неправильно:java.lang.OutOfMemoryError для написания InputStream в FileOutputStream

public static void writeToFile(InputStream inputStream, File file) throws IOException, FileNotFoundException { 
    OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file)); 
    try { 
     int size = 1024 * 1024; 
     byte[] buf = new byte[size]; 
     int byteRead; 
     while ((byteRead = inputStream.read(buf)) > 0) { 
      outputStream.write(buf, 0, byteRead); 
     } 
     outputStream.close(); 
     inputStream.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Исключение:

6157-6185/com.wiserep E/AndroidRuntime﹕ FATAL EXCEPTION: 
IntentService[SynchronizationService] java.lang.OutOfMemoryError 
    at java.lang.String.<init>(String.java:432) 
    at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:642) 
    at java.lang.StringBuffer.toString(StringBuffer.java:723) 
    at com.splunk.mint.network.io.InputStreamMonitor.updateBody(InputStreamMonitor.java:104) 
    at com.splunk.mint.network.io.InputStreamMonitor.read(InputStreamMonitor.java:71) 
    at com.wiserep.web.HttpTransport$HttpHelper.writeToFile(HttpTransport.java:196)  

библиотеки:

  • импорт android.util.Log;
  • import org.apache.http.NameValuePair;
  • импорт javax.net.ssl. *;
  • импорт java.io. *;
  • импорт java.net. *;
  • импорт java.security.cert.X509Certificate;
  • импорт java.text.SimpleDateFormat;
  • import java.util.Date;
  • импорт java.util.List; import java.util.Locale;
+0

Избегайте назначения и считывания значения в той же операции. Это только смутит вас и всех, кто прочитает код. –

+1

Что заставляет вас думать, что конкретный OME исходит из кода, который вы упомянули? Похоже, вы используете библиотеку 'com.splunk.mint.network.io'. – Santosh

ответ

4

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

+1

cf. http://docs.splunk.com/Documentation/MintAndroidSDK/latest/DevGuide/Disablenetworkmonitoring – ArtemGr

0

Возможно, причина в том, что вы запрашиваете куски памяти слишком большие, а телефон не имеет смежного блока, достаточного для его распределения, поэтому он дает Outofmemoryerror. Попробуйте уменьшить размер куска

+0

Этот код хорошо работает в старой сборке проекта с текущим backend api, но теперь я получаю эту ошибку при попытке запустить мой старый код Java – KursikS