2013-04-03 2 views
1

Я пытаюсь загрузить большой файл ~ 10 МБ на сервер и понял, что в 2.3.4 поток записывается в память раньше записывая на сервер, я подтверждаю это поведение, просматривая Дамп памяти кучи, из-за этого для большого файла он вызывает исключение OutOfMemory. Я не вижу такого же поведения на устройстве 4.2.Android 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(); 

ответ

1

Я подал ошибку с Google-андроид, и они утверждают, что это фиксированный для выпуска Gingerbread, но я все еще в состоянии воспроизвести проблему в 2.3.4

Ссылка на ошибку https://code.google.com/p/android/issues/detail?id=53946 и https://code.google.com/p/android/issues/detail?id=3164

Я закончил с использованием HttpClient для Эклер, Froyo, Gingerbread и HttpURLConnection для Honeycomb и выше

Смежные вопросы