2013-04-03 20 views
1

我試圖上傳一個大的文件〜10 MB在服務器上,並意識到在2.3.4上流首先寫入內存寫入服務器,我通過查看堆內存轉儲來確認此行爲,因爲這對於大文件會導致OutOfMemory異常。我在4.2設備上看不到相同的行爲。安卓HttpsURLConnection在2.3.4 OutOfMemoryError而上傳大文件(字節[]在內存中)

以下是我使用的代碼:

URL url = new URL(uri); 
    connection = (HttpsURLConnection) url.openConnection(); 
    connection.setDoOutput(true); 
    connection.setRequestMethod("PUT"); 
    connection.setRequestProperty("content-type", ""); 
    connection.setRequestProperty("Accept-Encoding", "");          
    connection.setFixedLengthStreamingMode((int)totalBytes); 
    out = new BufferedOutputStream(connection.getOutputStream()); 
    fis = new BufferedInputStream(new FileInputStream(file)); 

    byte[] buffer = new byte[32 * 1024]; 
    int bytesRead = 0; 
    int totalBytesRead = 0; 
    while ((bytesRead = fis.read(buffer)) != -1) 
    { 
     totalBytesRead = totalBytesRead + bytesRead;     
      out.write(buffer, 0, bytesRead);// OOM Error     
    } 

    out.flush(); 

回答