Запись в DataOutputStream вызывает ошибку outofmemory
Я делаю сообщение https большого файла, используя HttpsURLConnection в кусках, используя ссылку -
загрузка файла с использованием httppost android
Я получаю смертельное исключение -
06-09 11:44:47.041 E/AndroidRuntime( 6250): FATAL EXCEPTION: Thread-712
06-09 11:44:47.041 E/AndroidRuntime( 6250): java.lang.OutOfMemoryError
06-09 11:44:47.041 E/AndroidRuntime( 6250): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
06-09 11:44:47.041 E/AndroidRuntime( 6250): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
06-09 11:44:47.041 E/AndroidRuntime( 6250): at libcore.net.http.RetryableOutputStream.write(RetryableOutputStream.java:61)
06-09 11:44:47.041 E/AndroidRuntime( 6250): at java.io.DataOutputStream.write(DataOutputStream.java:98)
Анализ HPROF -
Утечка Подозреваемый
Один экземпляр "libcore.net.http.RetryableOutputStream", загруженный "", занимает 134 216 008 (82,46%) байтов. Память накапливается в одном экземпляре "byte[]", загруженном "".
подробности
buf java.io.ByteArrayOutputStream @ 0x444fd460 16 134,215,984
content libcore.net.http.RetryableOutputStream @ 0x444fd448 24 134,216,008
out java.io.DataOutputStream @ 0x4467f918 24 48
Может кто-нибудь, пожалуйста, помогите мне избавиться от этого.
я добавил DataOutputStream.flush
как хорошо, но без толку
// read file and write to buffer
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
int pktSend = 0;
// continue till bytes read not null
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
pktSend++;
dos.flush();
}
1 ответ
Может быть, вы можете попробовать настройки ниже вашего кода:
// set the request mode as POST
urlConnection.setRequestMethod("POST");
// disable using cache.
urlConnection.setUseCaches(false);
// enable Output/Input.
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);