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(); 
    } 
+0

可能沒有關係,但你應該有:'dos.write (buffer,0,bytesRead);' – marcinj

+0

在添加HttpUrlConnectionObject.setChunkedStreamingMode(maxBufferSize)後,DataOutputStream在write在代碼中。有人可以幫忙嗎? – Chauhan

回答

0

也許你可以試試下面的設置您的代碼:

 // set the request mode as POST 
     urlConnection.setRequestMethod("POST"); 

     // disable using cache. 
     urlConnection.setUseCaches(false); 

     // enable Output/Input. 
     urlConnection.setDoOutput(true); 
     urlConnection.setDoInput(true);