2
我正在使用的塊HttpsURLConnection的做大型文件的HTTPS POST使用鏈接 -DataOutputStream類寫造成內存溢出錯誤
file upload using 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();
}
可能沒有關係,但你應該有:'dos.write (buffer,0,bytesRead);' – marcinj
在添加HttpUrlConnectionObject.setChunkedStreamingMode(maxBufferSize)後,DataOutputStream在write在代碼中。有人可以幫忙嗎? – Chauhan