我试图在服务器上上传一个大文件〜10 MB,并意识到在2.3.4上先将流写入内存,然后再写入服务器,我通过查看堆内存转储来确认此行为,因此对于大文件它导致OutOfMemory异常。我在4.2设备上看不到相同的行为。

以下是我正在使用的代码:

    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();

最佳答案

我向google-android提交了一个错误,他们声称该问题已在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用于Eclair,Froyo和GingerBread
和HttpURLConnection(用于HoneyComb及更高版本)

关于android - 上载大文件(内存中的字节[])时,Android HttpsURLConnection在2.3.4 OutOfMemoryError上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15798824/

10-08 22:24
查看更多